关于UNICODE VC项目二三事

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

在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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值