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

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

相关推荐
core5121 个月前
一文说清flink从编码到部署上线
flink·部署·yarn·编码·cdc·guava30·guava18
H轨迹H1 个月前
2024御网杯信息安全大赛个人赛wp_2024-11-27
ctf·编码·misc
帅逼码农2 个月前
GRS码(Generalized Reed-Solomon Code)
编码·grs码
江上清风山间明月2 个月前
Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍
编码·dolby truehd·dolby digital·dolby plus·eac3·dobby
QGC二次开发3 个月前
Qt:图片文字转base64程序
开发语言·c++·qt·数据可视化·base64·编码
Heaven6453 个月前
1.7 编码与调制
计算机网络·编码·调制
Android技术栈5 个月前
鸿蒙(API 12 Beta3版)【HDR Vivid视频录制】 音视频编码
华为·音视频·harmonyos·媒体·openharmony·编码·鸿蒙开发
小堃学编程5 个月前
Redis远程字典服务器 —— string类型详解
redis·缓存·编码·命令
Android技术栈5 个月前
鸿蒙(API 12 Beta3版)【时域可分层视频编码】 音视频编码
音视频·harmonyos·鸿蒙·鸿蒙系统·媒体·openharmony·编码