https://www.cnblogs.com/lustforlife/p/4098071.html VS2010中qDebug输出乱码的问题

3 篇文章 0 订阅

VS2010中qDebug输出乱码的问题
1、开发环境:安装Qt5.3.2(离线安装包安装);VS版本为:2010 SP1Rel;源代码默认保存格式为GB2312。

2、输出乱码的代码

#include <QtCore/QCoreApplication>
#include

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终端显示程序)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值