在VC项目使用UNICODE, wchar_t这些,经常会遇到一些小问题,这里简单记录一下
1. wfopen/fopen的输出,中文是乱码
这是因为vc的标准输出,默认locale是ansi,而不是中文环境,就算你在fopen中指定了ccs=UNICODE也没有用。
正确的做法,调用标准输出之前,需要设置locale,比如
_wsetlocale(LC_ALL, L"zh_CN.utf-8");
后面的zh_CN.utf-8,三部分分别表示中文,中国,utf-8编码。如果只是语言,可以只设置zh或者chs,但是编码可能是gb2312。
确保程序可读性和项目一致性,我的项目所有网络传输和文件存储,文件都采用utf-8编码,因此setlocale设置为utf-8,对应的fopen也设置为utf-8。
如下方式创建的文本问题,有一个问题,可能有BOM头来说明文本文件编码格式,可能有的函数或者字符串处理会不支持,需要注意。要想完全控制文件的每个字节,用二进制格式,或者用CreateFile一族函数来处理。对于文本文件,'\n'对应的就是0x0d0a,总之文本模式,相关的字符串处理,有很多坑需要注意,都是为了不断地向前兼容。
FILE* f = ::_wfopen(L"xxx.log", L"a,ccs=utf-8");
2. Windows程序如何显示控制台窗口并输出
开发阶段,常用的log方式有几种:输出到vc调试窗口,输出到控制台,输出到文件,输出到dbgview。除了控制台都有比较简单现成的解决方案。
控制台,最简单的方式,程序初始化阶段调用AllocConsole

本文详述了在VC项目使用UNICODE时遇到的问题及其解决办法,包括标准输出中文乱码的处理、日志输出的多种方式、宏转换及SHFileOperation调用失败的原因。同时,探讨了标准库中带下划线和w前缀的函数含义。
最低0.47元/天 解锁文章
588

被折叠的 条评论
为什么被折叠?



