编码问题之---解决英文系统乱码

问题:

程序中有如下逻辑:

  1. 向网络请求数据,然后获取响应的部分HTML代码,此时获取到的数据为宽字节字符(wchar_t)。
  2. 需要对获取到的部分HTML代码进行分析,但是处理逻辑只接受多字节字符(char),这个就需要进行编码转换,使用ATL提供的转换函数(其实是个模板类)CW2A。并且使用默认的code page :CP_THREAD_ACP。
  3. 分析过程会从HTML中解析出一些属性值,当然这些属性值是以多字节字符返回的。
  4. 程序其他地方需要使用这些属性值,我们又得把多字节字符转换成宽字节字符,使用CA2W。

在中文操作系统下面一切正常,可是到了英文系统下就会出现HTML中的中文属性值乱码。

解决方法:

在使用ATL字符转换函数时,不要用默认参数CP_THREAD_ACP,而是使用UTF8的编码。

分析:

CP_THREAD_ACP和CP_ACP应该是一样的,都是使用ANSI的编码,在调试状态下,可以看到第二步的字符转换结果是一些乱码“????”,第四步转换会宽字节字符任然是乱码“????”。

使用UTF8进行转换第二步结果是中文乱码(是一些繁体字之类的),到第四步结果就会恢复过来。

原文地址:https://www.cnblogs.com/aishangxue/p/3396488.html