编码问题之---解决英文系统乱码
问题:
程序中有如下逻辑:
- 向网络请求数据,然后获取响应的部分HTML代码,此时获取到的数据为宽字节字符(wchar_t)。
- 需要对获取到的部分HTML代码进行分析,但是处理逻辑只接受多字节字符(char),这个就需要进行编码转换,使用ATL提供的转换函数(其实是个模板类)CW2A。并且使用默认的code page :CP_THREAD_ACP。
- 分析过程会从HTML中解析出一些属性值,当然这些属性值是以多字节字符返回的。
- 程序其他地方需要使用这些属性值,我们又得把多字节字符转换成宽字节字符,使用CA2W。
在中文操作系统下面一切正常,可是到了英文系统下就会出现HTML中的中文属性值乱码。
解决方法:
在使用ATL字符转换函数时,不要用默认参数CP_THREAD_ACP,而是使用UTF8的编码。
分析:
CP_THREAD_ACP和CP_ACP应该是一样的,都是使用ANSI的编码,在调试状态下,可以看到第二步的字符转换结果是一些乱码“????”,第四步转换会宽字节字符任然是乱码“????”。
使用UTF8进行转换第二步结果是中文乱码(是一些繁体字之类的),到第四步结果就会恢复过来。