以下因素都有影响:
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官方版(非自编译版)

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

有用参考文章:http://www.qtcn.org/bbs/read-htm-tid-54151.html

QT+VS编译器处理字符串时的坑真是多的更多相关文章

  1. Qt sprintf_s函数格式化字符串出错

    Qt sprintf_s函数格式化字符串出错 问题的出现: 我在VS上用c C++写的跨平台的函数 移植到Qt 上面 出现sprintf_s 函数格式化出错. 开始以为是编码问题  反复查找Qt乱码问 ...

  2. C#反序列化json字符串时,提示:应为来自命名空间“”的元素“root”。。遇到名称为“”、命名空间为“”的“None”。

    反序列化调用接口返回的字符串时,出现:应为来自命名空间“”的元素“root”..遇到名称为“”.命名空间为“”的“None”.,导致反序列化数据失败,这种失败并有时候并不会直接提示反序列化失败(抛异常 ...

  3. java.text.MessageFormat格式化字符串时的小技巧

    java.text.MessageFormat格式化字符串时的小技巧 public static void main(String[] args) throws InterruptedExceptio ...

  4. fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题

    fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题. 先记下这个坑,改天在看看是怎么导致的,暂时通过避免使用Integer作为键(使用St ...

  5. net.sf.json.JSONObject处理 "null" 字符串的一些坑

    转: net.sf.json.JSONObject处理 "null" 字符串的一些坑 2018年05月02日 16:41:25 大白能 阅读数:7026   版权声明:本文为博主原 ...

  6. JSON.parse 解析json字符串时,遇字符串换行符,解析失败

    今天遇到json字符串转对象时报错了,发现有个字符串有换行符,仔细找了原因. 结果是因为JSON.parse转json字符串时遇到一些特殊字符需要先转义,如图所示 然后尝试了各路大神介绍的办法,均不适 ...

  7. 【翻译】利用Qt设计师窗体在运行时创建用户界面(Creating a user interface from a Qt Designer form at run-time)

    利用Qt设计师窗体在运行时创建用户界面 我们利用Calculator窗体例子中创建的窗体(Form)来展示当一个应用(application)已经生成后,是可以在其运行时产生与例子中相同的用户界面. ...

  8. 将数据转化成字符串时:用字符串的链接 还是 StringBuilder

    /* 目的:将数据转化成字符串时:用字符串的链接 还是 StringBuilder呢? */ public class Test{ public static void main(String[] a ...

  9. 个人经验 - Android的RelativeLayout布局的layout_height属性设置为wrap_content时的坑

    Android的RelativeLayout布局的layout_height属性设置为wrap_content时的坑: 此坑出现的条件: 1.RelativeLayout布局的layout_heigh ...

随机推荐

  1. N!大整数阶乘问题

    问题:求N!阶乘,1<=N<10000 思路:windows下面visual 6.0中c一个整型占4个字节(自己可以try一下,printf("%d", sizeof( ...

  2. 一些 Shell 脚本(持续更新)

    1. 启动日志分析 启动日志格式如下: 开机时间:2015/05/13 周三 16:45:17.79 关机时间:2015/05/13 周三 18:46:03.91 开机时间:2015/05/14 周四 ...

  3. HDU 5693 D Game 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 题解: 一种朴实的想法是枚举选择可以删除的两个或三个数(其他的大于三的数都能凑成2和3的和), ...

  4. 将通过find命令找到的文件拷贝到一个新的目录中

    将通过find命令找到的文件拷贝到一个新的目录中 有这样的一个需求,需要将一部分符合条件的文件从一个目录拷贝到另一个目录中,我通过find命令从源目录查找到符合条件的文件然后使用cp命令拷贝到目标目录 ...

  5. 802.11 wireless 七

    802.11 wireless 7Wireless Fundamentals : End-to-End Discovering the NetworkGetting Connect Clients i ...

  6. poj 1985 Cow Marathon 树的直径

    题目链接:http://poj.org/problem?id=1985 After hearing about the epidemic of obesity in the USA, Farmer J ...

  7. The 15th Zhejiang University Programming Contest

    a  ZOJ 3860 求和大家不一样的那个数,签到,map水之 #include<cstdio> #include<map> using namespace std; map ...

  8. cordova /phonegap 自定义插件

    ### cordova /phonegap 自定义插件 在使用cordova 的过程中,虽然官方提供的插件以及其他人开源的插件较多.但有时为了实现某种需求,还是需要自己编写插件. 以前总是会手动的配置 ...

  9. sublime text3使用心得及个人配置 sublime常用快捷键大全

    下载好后:1.安装package controlimport urllib.request,os; pf = 'Package Control.sublime-package'; ipp = subl ...

  10. iOS常见各种ID

    //CFUUID CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault); NSString *cfuuidString = (NSString*)C ...