zoukankan      html  css  js  c++  java
  • VS2010中qDebug输出乱码的问题

    1、开发环境:安装Qt5.3.2(离线安装包安装);VS版本为:2010 SP1Rel;源代码默认保存格式为GB2312。

    2、输出乱码的代码

    #include <QtCore/QCoreApplication>
    #include <QRegularExpression>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QString namePattern("人员状态表-(\D+)-");
        QRegularExpression re(namePattern);
    
        QString input("人员状态表-张三-20141107.xlsx");
        QRegularExpressionMatch    match = re.match(input);
        bool hasMatch = match.hasMatch();
        if (hasMatch)
        {
            qDebug("input matched!");
            QString name = match.captured(1);
            qDebug(name.toUtf8());
        }
        else
            qDebug("warning:input unmatched!");
    
        return 0;
    }

    windows控制台输出:

    input matched!
    ????
    请按任意键继续. . .

    3、修改代码

    在文件头加上:

    #if _MSC_VER >= 1600
    #pragma execution_character_set("utf-8")
    #endif

    windows控制台输出:

    input matched!
    张三
    请按任意键继续. . .

    4、小结

    • 在windows环境下开发简单qt程序时,不需要支持国际化,可以简单在源代码中直接使用中文字符。
    • SP1版本的VS2010已经可以通过上述预处理程序将代码中的中文字符解析成UTF-8编码。
    • Qt5内部将所有字符当作UTF-8编码进行处理(印象中看过的资料上说明,未考证)。
    • VS编辑器中看到的中文字符的编码过程大致如下:
      • 默认情况:GBK编码(VS编辑器中显示)->GBK编码(在内存中的编码,由VS编辑器转换,作为C++源码的一部分给编译器处理,包括词法分析、语法分析)->GBK编码(目标程序中的编码,由VS编译器生成)->GBK编码(运行时主程序使用,Qt部分代码将其作为UTF-8处理)->GBK编码(windows终端显示程序)。
      • 修改后情况:GBK编码(VS编辑器中显示)->UTF编码(在内存中的编码,由VS编辑器转换,作为C++源码的一部分给编译器处理,包括词法分析、语法分析)->UTF编码(目标程序中的编码,由VS编译器生成)->UTF编码(运行时主程序使用,Qt部分代码将其作为UTF-8处理)->GBK 编码(windows终端显示程序)。
  • 相关阅读:
    local_irq_disable和disable_irq的区别
    linux内核IDR机制详解【转】
    飞秋2013设置后无法保存配置问题
    windows 格式化D盘
    query 中 radio选中小技巧
    磁盘碎片整理
    服务器如何选择备案产品类型?
    虚拟主机需要备案吗?
    操作系统自带的截图工具无法保存问题
    CA210彩分仪校准步骤
  • 原文地址:https://www.cnblogs.com/lustforlife/p/4098071.html
Copyright © 2011-2022 走看看