请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

字符串打印

wchar_t *z=L"您好";
wprintf(L"%s\n",z);

老师,上面的代码我用MSVC,文件使用gbk编码,为啥打印的结果不是 您好 呢?
下面的代码,我用MSVC,文件使用gbk编码,可以打印出您好,用mingw,文件使用utf8编码,打印就是错的了

char z[]="您好";
printf("%s\n",z);
puts(z);

感觉这一块好乱呐

正在回答 回答被采纳积分+3

1回答

bennyhuo 2021-01-31 07:29:21

先看第一个哈:

wprintf 会把参数宽字符串转成窄字符,然后打印到控制台。这个转换的过程需要知道目标窄字符的编码(宽字符的编码时确定的,一般就是 UTF-16),这个编码取决于 locale。msvc 默认的 locale 是 C,因此打印时转换的结果并不会是 gbk 编码。如果你在 msvc 上打印之前调用 setlocal(LC_ALL, "chs"),结果就可以正确输出了。视频里面有讲,仔细回顾一下哈。


下面的是窄字符,MSVC 使用 gbk 编码,是因为 windows 默认的中文编码使用的是 gbk,要确保编译器能以 gbk 的形式将 您好 二字读到内存里面,所以文件使用 gbk 编码。视频里面我们也有讲你想要给 msvc 用 utf-8 编码要怎么配置。mingw 默认则使用 utf-8 编码,逻辑类似。mingw 打印出来的是乱码,主要是因为控制台的编码时 gbk。切换一下控制台的编码就行了。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信