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终端显示程序)。
时间: 2024-11-10 01:15:30

VS2010中qDebug输出乱码的问题的相关文章

cocos2dx学习笔记(4)——VS2010中的中文乱码问题

当你想使用中文时,你是否有这样的一个困惑. 把样例中的HelloWorld改成中文的 "你好,世界!". 然后编译运行,发现居然是个乱码!!! 因为cocos2dx中使用的是UTF-8字符集,而VS中确实ANSI. 所以我们需要对其进行字符集转换. 然后纵里寻它求百度,终于找到了解决方案. 一个函数搞定! #include "cocos2d.h" char* toUTF(const char* strGB2312) { int iLen = MultiByteToW

VS2010中wmain入口函数中使用wprintf输出中文乱码问题

生活中的单例 中国(China),位于东亚,是一个以华夏文明为主体.中华文化为基础,以汉族为主要民族的统一多民族国家,通用汉语.中国疆域内的各个民族统称为中华民族,龙是中华民族的象征.古老的中国凭借自身的发展依旧美丽的屹立于东方民族之林,闪耀着她动人的光彩,世界上只有一个中国,任何部分都是祖国不可分割的一部分,今天我们的设计模式就从伟大的祖国开始说起---单例模式. 详解单例模式 单例模式是什么?跟我们的祖国有着怎样的关系呢?首先我们来看一下单例,从"单例"字面意思上理解为-一个类只有

《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章

<如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章 问题:   VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何编程让一个tt文件可以输出多个结果文件. 回答:   <#@ Import Namespace="System.Text" #> <#@ import namespace="System.IO" #> <#@ Import Namespace=

cmd命令行中logcat输出日志中文乱码

在命令行使用adb logcat命令直接输出日志中文内容显示乱码,原因是中文系统中cmd命令行窗口默认的编码是GBK,而LogCat打印的日志是UTF-8编码,所以adb logcat命令输出的中文内容显示乱码. 修改cmd命令行窗口字符编码即可解决logcat日志中文显示乱码问题: 1.cmd命令行窗口字符编码切换为UTF-8,命令行中执行:chcp 65001 2.修改cmd窗口字体属性,在命令行标题栏上点击右键,选择”属性”->”字体”,将字体修改为”Lucida Console”,点击确

VS2010中汉字拷贝到Word出现乱码问题解决

VS2010中的汉字拷贝到Word时出现乱码,有三种解决方法: 一.粘贴时,选择“仅保留文本”.如图: 二.先拷贝粘贴到记事本文件内,此时会自动过滤格式信息,再从记事本拷贝到Word. 三.使用转换软件“vs2010CopyToWord.exe”,此软件能对剪贴板内的内容进行处理. http://files.cnblogs.com/files/icooper/vs2010CopyToWord.rar

vs2010中的MSBuild输出warning MSB8012问题

vs2010中,MSBuild与C++编译器无缝整合.无论使用vs2010生成的代码,还是转换vs2008或者是更低版本vs编译的C++代码.都会在工程编译后,都会提示一条错误: C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(935,5): warning MSB8012: TargetPath(c:\users\kalmbach\documents\visual studio 2010\Projec

jenkins控制台输出乱码

根据以往写代码的经验,jenkins控制台输出乱码有可能是编码导致的,问了一下度娘,果然如此,解决办法如下:修改下jenkins的配置文件,设置字符编码为:UTF-8即可,打开jenkins的安装目录,找到jenkins.xml文件,在<arguments>标签处添加红色字体,即定义编码为utf-8<arguments>-Xrs -Xmx512m -Dfile.encoding=utf-8 -Dhudson.lifecycle=hudson.lifecycle.WindowsSer

eclipse运行 Maven Test命令时控制台输出乱码的解决办法

在Maven的pom.xml文件中增加: <properties>      <argLine>-Dfile.encoding=UTF-8</argLine> </properties> 今天突然遇到这个问题了,上网搜了一下,答案一大堆,还是这个最好!记录一下! eclipse运行 Maven Test命令时控制台输出乱码的解决办法,布布扣,bubuko.com

二维码Data Matrix简单介绍及在VS2010中的编译

Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明.Data-Matrix二维条码是一种矩阵式二维条码. Data Matrix符号由规则排列的深浅色正方形模块构成,每一个正方形模块就是一个基本单元.每一个基本单元又被编码为一比特的数据. 数据区的四周是探測图形.用于条码符号定位和确定条码结构信息.探測图形的四周是空白区,用以将条码符号与背景分离. 探測图形是一个模块的宽度.是数