提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一、 为什么你的操作没有出现乱码?
- 二、 能稳定复现乱码的测试思路
- 方案 1:使用 **GBK 不支持的字符**(最简单)
- 方案 2:手动破坏编码(字节层面,最直观)
- 方案 3:跨系统/编码测试(ASCII 编码场景)
- 三、 关键补充:记事本的编码识别逻辑
我想使用电脑的记事本测试一下不同编码的乱码显示效果,但是我新建一个txt,设置为utf-8编码,在里面写了汉字保存,然后再把这个文件设为ansi编码,可是为什么没有显示乱码,我想测试一下乱码效果,解释下原因,并提供一个测试思路
一、 为什么你的操作没有出现乱码?
核心原因是:你做的是「编码转换」,而非「编码不匹配解析」,且常用汉字在中文系统的UTF-8和ANSI编码中存在兼容映射。
我们先明确两个关键概念:
- 编码的本质:字符(如“你”)和二进制字节的对应规则。
- 乱码的本质:用错误的编码规则解析二进制字节→ 字节无法映射到正确字符,出现
�或无意义字符。
你的操作流程(UTF-8 存汉字 → 另存为 ANSI)中,记事本做了主动的字符转码,而非直接用 ANSI 解析 UTF-8 字节:
- 中文 Windows 系统中,
ANSI编码等价于GBK(兼容 GB2312),覆盖了绝大多数常用汉字。 - 当你选择「另存为 → ANSI」时,记事本会将原 UTF-8 编码的汉字转换为 GBK 编码的字节,再保存。
- 再次打开时,用 ANSI(GBK)解析 GBK 字节,自然不会乱码。
只有当字符不在目标编码的字符集内,或直接用错误编码解析原字节时,才会触发乱码。
二、 能稳定复现乱码的测试思路
要复现乱码,核心是制造「字节内容」和「解析编码」的不匹配,绕开记事本的自动转码功能。以下提供 3 种可落地的测试方案:
方案 1:使用GBK 不支持的字符(最简单)
利用「UTF-8 支持全 Unicode 字符,而 GBK 仅支持常用汉字」的特性,选择 GBK 字符集外的字符测试。
- 新建记事本,输入GBK 不支持的字符,例如:
- 生僻汉字:𠀀、𠑳(扩展区汉字,不在 GBK 字符集内)
- 特殊符号:😀(Emoji)、𝄞(音乐符号)、ℤ(数学符号)
- 选择「另存为 → 编码选 UTF-8 → 保存」。
- 再次打开文件,选择「另存为 → 编码选 ANSI → 保存」。
- 重新打开这个 ANSI 编码的文件:GBK 不支持的字符会变成
�或方块乱码,常用汉字依然正常。
方案 2:手动破坏编码(字节层面,最直观)
用十六进制编辑器直接修改文件字节,制造编码不匹配,彻底绕开记事本的自动转码。
工具:Windows 自带的WinHex(需安装)或在线十六进制编辑器。
- 新建记事本,输入简单内容:
测试编码乱码,另存为 UTF-8(带 BOM)。- UTF-8 带 BOM 的文件开头有 3 个字节:
EF BB BF,记事本靠这个识别 UTF-8 编码。
- UTF-8 带 BOM 的文件开头有 3 个字节:
- 用十六进制编辑器打开这个 txt 文件,删除开头的
EF BB BF字节,保存文件。 - 用记事本打开修改后的文件:
- 记事本无法识别 UTF-8 编码,会默认用 ANSI(GBK)解析 UTF-8 字节 → 直接出现乱码(例如:
娴嬭瘯缂栫爜闅忔剰)。
- 记事本无法识别 UTF-8 编码,会默认用 ANSI(GBK)解析 UTF-8 字节 → 直接出现乱码(例如:
方案 3:跨系统/编码测试(ASCII 编码场景)
ANSI 在英文系统中是ASCII 编码(仅支持 0-127 的字符),中文在 ASCII 中无对应字节,必然乱码。
- 在中文 Windows 中,新建记事本输入
中文测试,另存为 UTF-8 编码(不带 BOM,可通过 Notepad++ 设置)。 - 将文件拷贝到英文 Windows 系统(或在中文系统中用记事本强制选择 ASCII 编码打开)。
- 用记事本打开文件并选择ASCII 编码→ 所有中文都会变成乱码(ASCII 无法解析中文多字节)。
三、 关键补充:记事本的编码识别逻辑
记事本打开文件时,优先级如下:
- 先检测BOM:有
EF BB BF→ 识别为 UTF-8;有FF FE→ 识别为 UTF-16 LE。 - 无 BOM → 默认用ANSI编码解析(中文系统=GBK,英文系统=ASCII)。
这也是方案 2 中删除 BOM 就能触发乱码的核心原因。