码迷,mamicode.com
首页 > 其他好文 > 详细

QT+VS编译器处理字符串时的坑真是多

时间:2014-11-27 20:18:19      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   使用   sp   文件   on   div   

以下因素都有影响:
1. QT4与QT5对字符串编码的处理不同(最好不要在源代码里直接写中文,坑更多)
2. QTextCodec自动对编码转换的影响
3. 源代码文件对编码存储格式的不同会影响编译器对字符串的理解
4. 不同版本编译器对源代码文件的理解不同,比如VC6和VC2005的不同,比如VS2010的pragma指令,更不用说MinGW与VC编译器的不同。
5. 也就是我今天碰到的,VS输出调试器对字符串编码的影响。以下代码在单步调试状态下读取utf8文件,中文正确,外文特殊字符乱码(其实也不是乱码,但是显示问号),鉴于前面QT的这么多坑,我都已经见怪不怪了。今天意外把打印值显示到界面上,全部正确!看来VS调试器输出部分(尽管用的是qDebug语句)与QT程序对字符串编码的理解也不同。

QTextStream in(&file);
in.setCodec("UTF-8"); // good,写上这个,中文环境下读取中文正确

while(!in.atEnd())
{
    QString line = in.readLine();
    qDebug() << line.toLocal8Bit(); // convert to locale multi-byte string 
    strCode = line;
}
file.close();

长叹一声,连最贴心的调试器都不靠谱,只有最终运行程序才靠谱,以后要千万小心。

------------------------------------------------------------------------------

我晕,又有新发现:
VS调试状态,底下左右两片区域,左边选择Watch 1窗口,右边选择Output窗口,同一个qDebug输出值,左边Watch正确,右边Output错误!

各位可以试试,把以下文字存储在utf8文件里(可以带BOM):
zsse中国最好utf8_éçàèöùïë

然后用我的代码读取后,观察Watch和Output的不同输出。

------------------------------------------------------------------------------

PS,我使用的是VS2008 SP1 TEAM 英文版 + 4.86官方版(非自编译版)

QT+VS编译器处理字符串时的坑真是多

标签:style   blog   color   os   使用   sp   文件   on   div   

原文地址:http://www.cnblogs.com/findumars/p/4126967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!