记录:vs中使用Unicode字符集时,wcout的问题

来源:互联网 发布:qserialport 发送数据 编辑:程序博客网 时间:2024/06/07 00:16

问题:使用的是vs2008,默认的字符集是多字节字符集,由于项目需要将字符集改成了UNICode,编码全部改写完并且一遍测试没问题。

代码中使用了正则匹配,在第一遍测试时是没有问题的,但是循环跑到第二次就会出问题。正则匹配总是出错。

调试:通过对相关正则匹配字符串二进制分析,发现第一遍是根据UNICODE编码每两个字节去匹配,执行完一遍后,正则匹配会只匹配UNICODE的第一个字节,也就是变成了单字节匹配。通过排查发现代码中的wcout.imbue(locale("chs"));将其locale设为本地语言,改变了编码方式,输出GBK编码的汉字。影响了正则匹配的方式。

问题解决方法:cout << T2A(Cstring) << endl;



UNICODE字符集下涉及到单个字符操作时慎重使用wcout.imbue(locale("chs"));

阅读全文
1 0