#pragma execution_character_set("utf-8")在类中声明此预编译!!!指示char的执行字符集是UTF-8编码。

为什么会出现乱码

首先,我们需要有的概念是乱码的问题是由编码和解码方式引起的。涉及到编码方式的地方有3个:

  1. 源码字符集
  2. 执行字符集
  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 中文乱码问题相关推荐

  1. qt5 中文乱码解决

    备注:qt5取消了两个函数: QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCo ...

  2. Qt5中文乱码解决方案

    升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题 第一种: 在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8 ...

  3. QT5 界面截图保存到本地+输出PDF/WORD格式文档+QT界面中文乱码及输出PDF中文乱码的解决(亲身实践并且成功)

    最近做了一个和QT5有关的项目,遇到很多问题也学习到不少,特意写下来希望帮到更多的人.(我的版本VS2017+QT5.12.0) 一.QT5截图并保存到本地 在头文件添加必须项 #include &l ...

  4. Qt中文乱码原因及解决方案

    本文主要分析了基于windows系统msvc2013编译器的Qt中文乱码. 概念 字库表:是一个系统支持的文字,符号,数字的集合. 编码字符集(字符集):我们平时所说的字符集就是这个,计算机以二进制的 ...

  5. qt5.13.2输出中文乱码

    qt5使用qDebug()输出中文乱码,可以在.pro文件中添加以下的代码: #解决中文编译没法通过,输出中文乱码 msvc {QMAKE_CFLAGS += /utf-8QMAKE_CXXFLAGS ...

  6. 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set(utf-8)两种方法)

    两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法) 升级到Qt5.X之后 ...

  7. 【QT5.3】VS2013+QT5.3 中文乱码问题 解决方案

    VS2013+QT5.3 中文乱码问题 解决方案 网上很多关于QT中文乱码的问题及答案,但情况不同解决方法也不一样. 本方案适用于VS2013+QT5.3环境(编译器是VC) using namesp ...

  8. 解决qt5在windows系统下中文乱码的问题的简单方法

    解决qt5在windows系统下中文乱码的问题的简单方法 解决方法 以utf-8格式为代表进行修改. 首先,确定自己需要的文字编码格式,并在qt的项目-编辑器里面定义 接下来,选择出现乱码的文件里面的 ...

  9. Qt5+MySQL 插入中文乱码解决方案

    1. 查看是否有mysql驱动,有输出MYSQL则有: QStringList drivers=QSqlDatabase::drivers();foreach(QString dvr,drivers) ...

最新文章

  1. execve系统调用_《操作系统》知识结构
  2. requests库怎么安装在python中-python安装requests库的实例代码
  3. 不同项目配置不同的 Git 账号
  4. 【BIOS大全】释义+设置+精解+释疑————玩转电脑必备工具帖(8)
  5. java导出word(带图片)
  6. C++ Primer(第四版) 课后习题3.14 vector单词转大写
  7. android 两足机器人,基于Android的双足机器人语音控制系统研究
  8. Struts1 处理接收参数插入到数据库之后呈乱码的问题解决
  9. Scribefire发CSDN博客
  10. 阿里妈妈数据字化营销与MaxCompute的不解之缘
  11. RabbitMQ在Ubuntu上的环境搭建
  12. 虚拟机变更网卡MAC地址后的网络连接
  13. Web开发之一:Web UI技术综述
  14. 启动rrt什么意思_面试官:你来说一下springboot启动时的一个自动装配过程吧!...
  15. 更新智能开发研发进度
  16. F1-VmwareCentOS7.x
  17. Linked List Cycle | ||
  18. SQL Server数据库简繁体数据混用的问题
  19. uni-app引入极光im
  20. access2016访问mysql_关于VB连接access2016数据库

热门文章

  1. XMemcached使用示例--转
  2. 机器学习Sklearn实战——极限森林、梯度提升树算法
  3. 【Python】写文件个性化设置模块Python_Xlwt练习
  4. Transformer 模型详解
  5. 没用过这些 IDEA 插件?怪不得写代码头疼
  6. JVM - 深入剖析字符串常量池
  7. 白话Elasticsearch48-深入聚合数据分析之 Percentiles Aggregation-percentiles百分比算法以及网站访问时延统计及Percentiles优化
  8. 实战SSM_O2O商铺_26【商品类别】批量新增商品类别从Dao到View层的开发
  9. Spring-AOP 流程切面
  10. mui 解决弹出图片问题