对中文乱码的理解,遇到乱码该怎么办。

最近在做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选项勾错了,这里也贴一下。

相关推荐
teacherlg9 天前
Source Insight 乱码问题解决
c++·乱码·编码·sourceinsight
菠萝加点糖15 天前
Android 使用MediaMuxer+MediaCodec编码MP4视频异步方案
android·音视频·编码
丁学文武1 个月前
如何把ChatGPT嵌入到自己的应用中?
人工智能·chatgpt·编码·大模型应用·ai替代
med-9192 个月前
Booth算法
编码·booth算法
深栈2 个月前
机器学习:编码方式
人工智能·python·机器学习·编码
杨小码不BUG2 个月前
CSP-J/S初赛知识点精讲-图论
c++·算法·图论··编码·csp-j/s初赛
菠萝加点糖3 个月前
Android 使用MediaMuxer+MediaCodec编码MP4视频
android·音视频·编码
三只蛋黄派4 个月前
Java文件写入与编码、字节数组、字符集、字符编解码 一文打通!
字符集·编码
墨雪遗痕5 个月前
中文Windows系统下程序输出重定向乱码问题解决方案
rust·编码·powershell
伊织code8 个月前
macOS 使用 enca 识别 文件编码类型(比 file 命令准确)
macos·文件·编码·file·iconv·enca