UTF-8 与 GBK 编码详解:从乱码到 Windows 代码页

UTF-8 与 GBK 编码详解:从乱码到 Windows 代码页 起因:一次 hermes update 脚本报错,.cmd 文件里全是 '慨澶嶉噸鏀?' 不是内部或外部命令 这样的乱码。排查后发现是 UTF-8 编码的文件被 cmd.exe 按 GBK 解析 导致的。这篇文章把这次踩坑学到的编码知识完整总结下来。 一、先分清两个概念:字符集 vs 编码 很多人把这两个概念混在一起说,其实这是两层: 概念 回答什么问题 例子 字符集 (Charset) “中"这个字排第几号? Unicode 里"中"是U+4E2D;GBK 里它是 0xD6D0 编码 (Encoding) 这个编号怎么存成字节? U+4E2D 存成 3 字节E4 B8 AD(UTF-8)或 2 字节 D6 D0(GBK) “中"还是那个"中”,只是两套系统给它编了不同的号、用不同的方式存储。 文件里存的永远是字节,读文件时必须知道"按哪套规则解释这些字节”——这就是编码的由来。 我的理解是:字符集就像字典,收录字符并给出一个唯一标志,编码就是把这个标志转换为字节表示 二、GBK:中文世界的老编码 中国国家标准,从 GB2312 扩展而来,是 1990 年代 ~ 2010 年代中文电脑的默认编码 汉字 2 字节,ASCII 字符 1 字节 只覆盖中文 + ASCII(及少量日文假名、朝鲜文等),不认识其他文字 优点:中文省 1/3 空间;是中文 Windows 的原生编码(代码页 CP936) 三、UTF-8:全世界的通用语 是 Unicode 字符集的一种编码实现,目标是把全人类所有文字统一编号 变长编码:ASCII 1 字节、欧洲文字 2 字节、中文 3 字节、生僻字 4 字节 关键设计:完全兼容 ASCII——任何一个 ASCII 文本文件,字节不变就是合法的 UTF-8 文件 这就是"UTF-8 最兼容"的真正含义:它不是"和所有编码兼容",而是它本身就是国际标准,任何现代系统都按它解释。 ...

2026-08-04 · 2 min · 422 words · Thouser