QT5 中文乱码问题
#pragma execution_character_set("utf-8")在类中声明此预编译!!!指示char的执行字符集是UTF-8编码。
为什么会出现乱码
首先,我们需要有的概念是乱码的问题是由编码和解码方式引起的。涉及到编码方式的地方有3个:
- 源码字符集
- 执行字符集
- 运行环境字符集
源码字符集(the source character set):源码文件时使用何种编码格式保存的。
执行字符集(the execution character):可执行程序内保存的是何种编码(程序执行时内存中字符串编码)
gcc 运行字符集设置参数
-finput-charset=charset //设置源码字符集为charset
-fexec-charset=charset //设置执行字符集为charset
-fwide-exec-charset=charset //设置宽字符串的执行字符集为charset
msvc 运行字符集设置参数
-execution-charset:utf-8 // 指明程序执行时使用UTF-8字符集
-source-charset:utf-8 // 指明源码文件的编码为UTF-8字符集
源码字符集确切的说是编译器认为源码文件的编码方式,执行字符集是可执行程序采用的编码方式,而运行环境字符集则是环境支持的编码方式。编译程序处理字符串的过程,实际上是首先读入字符的二进制数,根据编码格式到另一种编码格式转换策略得到另外一串二进制数,所以1->2可能有二进制数的变化,而3则是通过既定的编码方式来解读2中的二进制数为字符(这里为什么说可能呢,因为1和2如果是相同的编码是不需要变化的)。
那么乱码的原因有:
①编译器解读源码字符集错误。如我是utf-8的源码,因为不带bom你当成locale,执行字符集也是locale所以不需要转换,而本来utf-8到locale是需要转换的。
②源码字符集到执行字符集的转换错误。如本来把识别正确的源码字符集locale转成执行字符集中的utf-8,结果你给我指定了错误了转换方式,说让我通过xxx编码转utf-8的策略转(Note:这是错误的表述,看到下面你就明白,实际上这里的错误只能是应为转换算法的错误)。
③字符解析错误。如果现在程序中的字符串二进制是utf-8的,结果你非要说执行字符集是loacle,那么解析肯定会出错。
还需要理解的包括下面的知识:
- windows console控制台代码页为locale,即把程序中的字符串二进制表示当locale执行字符集来解读
- 字符串二进制的表示形式不需要编译,直接拷贝到执行程序的二进制中
QT5 中文乱码问题相关推荐
- qt5 中文乱码解决
备注:qt5取消了两个函数: QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCo ...
- Qt5中文乱码解决方案
升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题 第一种: 在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8 ...
- QT5 界面截图保存到本地+输出PDF/WORD格式文档+QT界面中文乱码及输出PDF中文乱码的解决(亲身实践并且成功)
最近做了一个和QT5有关的项目,遇到很多问题也学习到不少,特意写下来希望帮到更多的人.(我的版本VS2017+QT5.12.0) 一.QT5截图并保存到本地 在头文件添加必须项 #include &l ...
- Qt中文乱码原因及解决方案
本文主要分析了基于windows系统msvc2013编译器的Qt中文乱码. 概念 字库表:是一个系统支持的文字,符号,数字的集合. 编码字符集(字符集):我们平时所说的字符集就是这个,计算机以二进制的 ...
- qt5.13.2输出中文乱码
qt5使用qDebug()输出中文乱码,可以在.pro文件中添加以下的代码: #解决中文编译没法通过,输出中文乱码 msvc {QMAKE_CFLAGS += /utf-8QMAKE_CXXFLAGS ...
- 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set(utf-8)两种方法)
两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法) 升级到Qt5.X之后 ...
- 【QT5.3】VS2013+QT5.3 中文乱码问题 解决方案
VS2013+QT5.3 中文乱码问题 解决方案 网上很多关于QT中文乱码的问题及答案,但情况不同解决方法也不一样. 本方案适用于VS2013+QT5.3环境(编译器是VC) using namesp ...
- 解决qt5在windows系统下中文乱码的问题的简单方法
解决qt5在windows系统下中文乱码的问题的简单方法 解决方法 以utf-8格式为代表进行修改. 首先,确定自己需要的文字编码格式,并在qt的项目-编辑器里面定义 接下来,选择出现乱码的文件里面的 ...
- Qt5+MySQL 插入中文乱码解决方案
1. 查看是否有mysql驱动,有输出MYSQL则有: QStringList drivers=QSqlDatabase::drivers();foreach(QString dvr,drivers) ...
最新文章
- execve系统调用_《操作系统》知识结构
- requests库怎么安装在python中-python安装requests库的实例代码
- 不同项目配置不同的 Git 账号
- 【BIOS大全】释义+设置+精解+释疑————玩转电脑必备工具帖(8)
- java导出word(带图片)
- C++ Primer(第四版) 课后习题3.14 vector单词转大写
- android 两足机器人,基于Android的双足机器人语音控制系统研究
- Struts1 处理接收参数插入到数据库之后呈乱码的问题解决
- Scribefire发CSDN博客
- 阿里妈妈数据字化营销与MaxCompute的不解之缘
- RabbitMQ在Ubuntu上的环境搭建
- 虚拟机变更网卡MAC地址后的网络连接
- Web开发之一:Web UI技术综述
- 启动rrt什么意思_面试官:你来说一下springboot启动时的一个自动装配过程吧!...
- 更新智能开发研发进度
- F1-VmwareCentOS7.x
- Linked List Cycle | ||
- SQL Server数据库简繁体数据混用的问题
- uni-app引入极光im
- access2016访问mysql_关于VB连接access2016数据库
热门文章
- XMemcached使用示例--转
- 机器学习Sklearn实战——极限森林、梯度提升树算法
- 【Python】写文件个性化设置模块Python_Xlwt练习
- Transformer 模型详解
- 没用过这些 IDEA 插件?怪不得写代码头疼
- JVM - 深入剖析字符串常量池
- 白话Elasticsearch48-深入聚合数据分析之 Percentiles Aggregation-percentiles百分比算法以及网站访问时延统计及Percentiles优化
- 实战SSM_O2O商铺_26【商品类别】批量新增商品类别从Dao到View层的开发
- Spring-AOP 流程切面
- mui 解决弹出图片问题