QT5.1+中文乱码问题
原文连接:https://blog.csdn.net/liyuanbhu/article/details/72596952
QT中规定 QString 的 const char* 构造函数是调用 fromUtf8() 构造的。所以要求字符串字面量是 UTF-8 编码的字节。
这里先要解释一下下面两个概念:
- 源码字符集(the source character set):源码文件是使用何种编码保存的
- 执行字符集(the execution character set):可执行程序内保存的是何种编码(程序执行时内存中字符串编码)
源码字符集很容易理解,就是我们源代码的编码。为了我们的代码能够跨平台,源文件要保存为带 BOM 的 utf-8。
执行字符集就麻烦多了。比如我们下面的代码片段:
QString str("我是中文");
即使这个文件存为 utf-8 格式了,编译成 exe 文件时,编译器也可能对这个字符串常量进行转码,转为别的编码格式。
在 gcc 中,控制这个转码操作的命令行参数是:
-fexec-charset=charset
如果不指定的话默认是 utf-8。所以我们用 gcc 时很少关注这个问题。
Viual Stdio 中就麻烦多了。这里先说 Visual stdio 2015,这个是我现在用的编译环境。VS2015 中如果源代码是 utf-8的,执行字符集默认是本地 Locale 字符集,对于简体中文的 windows 系统来说,这个 本地Locale字符集是 gb18030。所以直接显示汉字会全是乱码。解决这个乱码有三个办法,第一个办法是编译时加入命令行参数,在 Qt 的 pro 文件中可以这样:
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
第二个办法是在源文件中加入:
#pragma execution_character_set("utf-8")
更好的办法是源代码写为:
QString str(u8"我是中文");
当然,这里要求编译器支持 C++11,因此上面的代码在 VS2005、VS2008 上是无法编译通过的。
另外,如果源代码保存为不带 BOM 的 utf-8。那需要告诉 VS2015 我们的编码格式是 utf-8,可以在 pro 文件中加入如下的代码:
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
另外再说说 VS2005、VS2008 下该如何设置。首先这两个编译器都不支持 C++11,也不支持执行字符集的设置,执行字符集就是默认的本地 Locale 字符集。所以我们的代码只能写为:
QString str = QString::fromLocal8Bit("我是中文");
QT5.1+中文乱码问题的更多相关文章
- 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法)
升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题第一种:在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式 ...
- VS2013+QT5.3 中文乱码和中文路径不识别
http://blog.csdn.net/brave_heart_lxl/article/details/7186631 ubun图中文乱码 https://blog.csdn.net/u013007 ...
- VC2010下Qt5的中文乱码问题
要搞清楚这个问题,先要弄明白编码.但是编码问题实在太复杂,这里肯定讲不开. 我先找一个例子,比如:“中文” 的 Unicode 码点/UTF8编码/GBK 分别是多少. 先去这个网站,输入 “中文” ...
- Qt5 界面中文乱码问题
1.文件所在项目文件 xxx.pro 中添加: QMAKE_CXXFLAGS += -execution-charset:utf- 2.文件以 UTF-8 编码保存 3.添加 utf-8 BOM
- QT笔记之解决QT5.2.0和VS2012中文乱码 以及在Qt Creator中文报错
转载:http://bbs.csdn.net/topics/390750169 VS2012 中文乱码 1.方法一: 包含头文件 #include <QTextCodec> ....... ...
- matlab C++ (VS Qt)混合编程 / mxArray / QT5中文乱码
一.混合编程环境搭建---依据我的情况,分成了4个部分: 1:破解matlab,因为matlab破解不完全,编译器不能使用,会出错.(参考https://blog.csdn.net/a12593012 ...
- windows下 qt5&vs2010 在qtCreator下中文乱码
环境:windows2012下 qt5.3.1 & vs2010 在qtCreator3.1.2下中文乱码 解决方法:在相关文件中加入代码 #ifdef Q_OS_WIN32 #if _MSC ...
- 【Qt开发】Qt5.7中文显示乱码解决方法两种
升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题 第一种: 在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8 ...
- Qt5完美解决 界面显示中文乱码
最近在学习Qt,可是一直头疼于中文乱码问题,上网搜了一下,很多都是Qt4中使用如下方法: QTextCodec *codec = QTextCodec::codecForName("gbk& ...
随机推荐
- Pikachu-Unsafe Fileupload(不安全的文件上传)
不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像.上传附件等等.当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型.后缀名.大小等等 ...
- C语言->关于文件数据的录入和输出调用的函数总结
数据输入输出对象之间的关系图: 函数使用说明: 1.一个字符的输入\输出,对象是键盘(缓存和屏幕) 1.1.getchar(a),putchar(a); 1.2.scanf(“%d”,&i), ...
- 记一次mysql的问题处理@20181225
需求:由于某种原因,导致一次分库分表的环境中ddl添加字段和索引没有完全成功,比如100个分库,只有部分修改成功,需要将没有修改成功的库和表找出来,在手动去执行. 由于线上环境,这里模拟还原一下该问题 ...
- mysql 零基础 开始过程
2016-11-07 算是差不多是两个月的学习,我也马上要结课了.今天才勉强把mysql装上,之前还有因为用户权限的问题,以及用户为创建的问题.应该早点就把该准备的开发平台准备好,而不是在最后快考试了 ...
- ArcGISServer发布流程
发布数据服务 在进行WebGIS开发中,地图显示的内容可以分成两类:一类是底图,或者是矢量的世界地图.中国地图.某个地区的底图:另一类就是业务图,对于用于遥感数据发布的WebGIS应用就是遥感影像的边 ...
- pandas玩转excel-> (1)如何利用pandas创建excel数据文件
#在Anaconda3 的Spyder中 #定义pandas模块为pd import pandas as pd #创建一个新的DataFrame对象,定义这个对象中有两个字段:ID和Name, ...
- DVA知识集合
react与dva 原文地址:https://github.com/dvajs/dva-knowledgemap 1.变量声明 const DELAY = 1000 let count = 0 cou ...
- Python查找列表中某个元素返回所有下标
需求 找出list中某一元素并返回所有匹配index值 问题 使用index()只能返回一个下标 >>> cw=[0,1,2,1,1,0,1,0,0,1] >>> ...
- Currency Exchange POJ - 1860 spfa判断正环
//spfa 判断正环 #include<iostream> #include<queue> #include<cstring> using namespace s ...
- LaTeX绘图
http://math.uchicago.edu/~weinan/programs/tex_diagrams/diagrams.html 给大家分享下这个,用鼠标画diagrams,然后可以一键复制l ...