在使用fwprintf向控制台打印诸如版权符©,或者注册商标符®时,发现输出的是问号(?),这无疑是一个字符集的问题。接收的数据是wchar_t,这个没办法变了。wchar_t为宽字符类型或双字符类型在,windows下采用的是unicode16,推测还是解析字符时使用的编码方式不正确。
尝试使用chcp,更改命令行调用的codepage,使用了gbk(936)和utf8(65001)不起作用,但更改uft16(1200),提示无效,所以没成功。
程序里调试发现,对应的字符指针的值是正确的,也就是打印调用出现的问题。经过同事帮助,更改了打印的方式。
wchar_t* result;
//方式1
#include <fcntl.h>
#include <corecrt_io.h>
_setmode(_fileno(stdout), _O_U16TEXT);
fwprintf(stdout, L"%s", result);
//方式2
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsoleW(console, result, wcslen(result), NULL, NULL);
经过测试,这两种方式都可以解决问题。但方式1会影响程序全局,方式2只适用于windows平台。
由于我程序在windows下运行,所以选择了方式2。