zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    剖析HBase负载均衡和性能指标
    Hadoop大数据挖掘从入门到进阶实战
    实战Kafka ACL机制
    论文笔记系列--MnasNet:Platform-Aware Neural Architecture Search for Mobile
    在 Vim 中优雅地查找和替换
    VIM的列编辑操作
    理解Pytorch中LSTM的输入输出参数含义
    Python为什么要用抽象类(abc模块)?
    概率密度估计介绍
    Docker永久挂载本地目录
  • 原文地址:https://www.cnblogs.com/findumars/p/4126967.html
Copyright © 2011-2022 走看看