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& ...
随机推荐
- 深度优先搜索DFS---全球变暖
内心OS:这道题是去年准备HD复试时,我用来练习DFS的.现在再做这道题,感触颇深,唉,时光蹉跎,物是人非啊~~ 题目: 你有一张某海域NxN像素的照片,”.”表示海洋.”#”表示陆地,如下所示: … ...
- BSP与HAL关系(转)
板级支持包(BSP)(Board Support Package)是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件 ...
- Centos 安装 Go 编译环境
1.下载go(最新版列表 https://studygolang.com/dl) wget -c https://studygolang.com/dl/golang/go1.13.5.linux-am ...
- 小白的java学习之路 “ 变量、数据类型和运算符”
一.变量: 1.什么是变量? 变量是一个数据存储空间的表示 变量由:变量名 变量类型 变量的值 2.创造变量的两种方法: 1.声明-->赋值-->取值 //声明变量 int money ...
- JMeter-做性能测试从何开始
JMeter-性能测试 参考文档:https://jmeter.apache.org/usermanual/boss.html 一.问题 1.预计的平均用户数是多少(正常负载)? 2.预计的高峰用户数 ...
- 关于文件中"wb"与"rb"的理解
“rb”,”wb”这两种方式在操作文件时,直接跳过了系统的编码方式,在windows系统中,用的编码为gbk: ①:with open(“a.txt”,”w”) as f1: F1.write(“aa ...
- C++使用taskkill 命令强制结束进程
一:查看 taskkill 命令和参数的方法 window系统下,快捷键win + R 打开运行 ,输入cmd回车,在 cmd 里面输入: taskkill /? 二:语法: taskkill [/ ...
- 转: VS 解决方案目录结构设置
https://www.cnblogs.com/zuibunan/p/3843459.html 下面的文章也有介绍 https://blog.csdn.net/lp310018931/article/ ...
- windows10 node-gyp安装
本机环境:win10,已安装vs2017,Node版本 10.13.0 1.安装node-gyp npm install -g node-gyp 2.安装完毕之后node-gyp list看一下 no ...
- Ubuntu 16 服务器配置PHP+MySQL+Apache环境
一.获取软件包资源并进行资源更新 apt是Ubuntu上默认的软件包管理器,使用它可以很容易进行各种软件安装,而且会自动帮你安装可能需要的依赖关系. 另一个强大的软件管理工具是 dpkg,可以用于安装 ...