采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
wchar_t *z=L"您好"; wprintf(L"%s\n",z);
老师,上面的代码我用MSVC,文件使用gbk编码,为啥打印的结果不是 您好 呢? 下面的代码,我用MSVC,文件使用gbk编码,可以打印出您好,用mingw,文件使用utf8编码,打印就是错的了
char z[]="您好"; printf("%s\n",z); puts(z);
感觉这一块好乱呐
先看第一个哈:
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。切换一下控制台的编码就行了。
登录后可查看更多问答,登录/注册
如果通向大牛的道路有捷径,那就是先学好C语言
1.6k 3
1.1k 4
1.3k 9
1.6k 1
841 2