北京网站定制报价,网站程序预装,大连建设工程规划公示牌,商务网站建设作业最近在做qtcreator使用cmake编译MSVC的工程#xff0c;遇到不少的乱码情况#xff0c;于是好好研究了一下编码#xff0c;整理了一些踩坑的经验。
一、中文乱码的来源
目前常见到的中文编码其实就两种#xff0c;UTF8和GBK。
我们遇到的绝大多数乱码#xff0c;就是系统…最近在做qtcreator使用cmake编译MSVC的工程遇到不少的乱码情况于是好好研究了一下编码整理了一些踩坑的经验。
一、中文乱码的来源
目前常见到的中文编码其实就两种UTF8和GBK。
我们遇到的绝大多数乱码就是系统使用中文时这两种编码被解析成了另一种。
在nodepad中做个实验如下
比如一个UTF8编码的“你好”使用GBK格式编码后显示如下 一个GBK格式的“你好”使用UTF8编码后显示如下 在cmd终端和powershell中基本也是同样的效果 二、对乱码问题的分析
当遇到乱码情况时从乱码内容就可以看出一些端倪。
首先要知道GBK主要针对中文编码所以即使胡乱编码大概率还是编成了一堆汉字就像上文的“浣犲ソ”。
然后UTF8是万国码预留了很多空闲编码位置所以乱编码的时候就很容易编成了未定义的字符。
所以现在当你看到一堆乱码就可以分析了
1、当这堆乱码是一堆混乱的中文那大概率是原本是UTF8格式的内容然后被编码成了GBK。
2、当这堆乱码是一堆看不懂的符号时大概率是原本是GBK格式的内容然后被编码成了UTF8。
对于简单的情况基本知道原因就知道如何解决了。
另外像常见的“锟斤拷”就是UTF8被编码成了GBK。
三、对乱码的排查
乱码的来源五花八门我这里只能说一个通用的排查方法。
从字符的源头出来到终点去了解中间每一步有可能涉及到编码的工具的编码处理格式。 比如我通过windows终端的 type 命令显示了一个文件结果是乱码。那么这中间可能涉及到编码的就有三个东西原文-type-终端输出流。只需要依次检查这三个对中文的编码格式是否一致。例如检查原文的时候先用notepad打开看看原文编码方式。然后查一下type这个命令有没有处理文件编码有的话是怎么处理的怎么调整。最后看一下我使用的终端cmd、ps等默认是用什么编码怎么修改。把这三个编码统一乱码问题就迎刃而解了。
又比如我使用了qtcreator打开一个使用基于msvc编译的cmake工程结果编译时输出端乱码了。这中间可能就涉及到msvc编译输出内容-cmake处理-qtcreator终端输出。不过最后排查出来cmake对流程没有影响是qtcreator有个控制终端是用UTF8选项勾错了这里也贴一下。