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


    以下因素都有影响:
    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

  • 相关阅读:
    redis 数据库总结
    drf 序列化类总结
    drf 视图类经典总结
    celery 简介
    虚拟环境搭建pip换源
    git 与 svn,简介差别
    redis 数据库简介
    auth 模块
    python的注释与用户交互 基本数据类型
    python入门
  • 原文地址:https://www.cnblogs.com/findumars/p/4126967.html
Copyright © 2020-2023  润新知