在使用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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具