字符编码(Character Encoding)
将字符映射为数字(码点)的规则体系。不同的编码标准对同一字符可能使用不同的字节表示,这是产生乱码的根本原因。
Windows-1252(CP1252)
微软 Windows 系统默认的西欧语言单字节字符编码,每个字符占 1 字节(0x00-0xFF),共 256 个字符。在 0x80-0x9F 范围内与 ISO 8859-1 有显著差异。
UTF-8
一种可变长度的 Unicode 编码方式,使用 1-4 个字节表示一个字符。兼容 ASCII,是当前互联网和软件开发的主流编码标准。
ISO 8859-1(Latin-1)
国际标准化组织制定的西欧语言字符编码标准。与 Windows-1252 在 0xA0-0xFF 范围一致,但在 0x80-0x9F 范围为不可打印的 C1 控制字符。
Unicode
国际通用的字符编码标准,为世界上几乎所有书写系统的每个字符分配唯一的码点(Code Point),如 U+00E9 表示 "e"。
字节(Byte)
计算机存储数据的基本单位,由 8 个二进制位组成,用两个十六进制数字表示(如 0x80)。Windows-1252 中每个字符对应 1 个字节。
十六进制(Hexadecimal)
以 16 为基数的数字表示法,使用 0-9 和 A-F 表示,常用于表示字节值。如欧元符号在 Windows-1252 中表示为 0x80。
乱码(Mojibake)
由于编码和解码使用不同字符集而导致的文本显示异常现象。最典型的情况是 UTF-8 文本被以 Windows-1252 方式解读后出现的奇怪字符。
替换字符(U+FFFD)
Unicode 中的特殊字符,当解码器遇到无法识别的字节序列时会使用此字符替代,导致原始信息永久丢失。
C1 控制字符
Unicode 和 ISO 8859-1 中 0x80-0x9F 范围内的不可打印控制字符。Windows-1252 将此范围重新映射为可打印字符,这是两者最关键的差异。
编码(Encode)
将可读文本转换为特定编码格式的字节序列的过程。例如将 UTF-8 文本编码为 Windows-1252 字节。
解码(Decode)
将字节序列按照特定编码规则还原为可读文本的过程。例如将 Windows-1252 字节解码为文本。
修复方向A
将乱码字符映射回原始 UTF-8 字节,再正确解码。适用于 UTF-8 文本被 Win1252 误读的最常见场景。
修复方向B
将文本字符重新编码为 Win1252 字节,再按 UTF-8 解码。适用于 Win1252 文本被 UTF-8 误读的场景。
码点(Code Point)
Unicode 中为每个字符分配的唯一编号,如 U+20AC 表示欧元符号。用于在不同编码之间进行字符映射。
字节序列(Byte Sequence)
一组按顺序排列的字节值,是编码后的数据在计算机中的实际存储形式。不同的编码方式会产生不同的字节序列。
UD5工具箱