unicode utf8 gbk encodings shift-jis web-dev

字符编码与 Unicode 绝对入门指南

告别乱码。深入理解 UTF-8, UTF-16, GBK 和 Shift-JIS,并了解字节顺序标记 (BOM) 如何影响您的文件。

2026-04-11

字符编码与 Unicode:UTF-8、UTF-16 及其他编码终极指南

在计算机发展的早期,表示文本非常简单:每个字符都占用 7 或 8 位 (ASCII)。但随着计算机走向全球,我们需要一种方式来表示世界上每种语言的每个字符。这就是 Unicode 及其背后的编码技术诞生的故事。

1. Unicode 标准

Unicode 本身不是一种编码,而是一个通用的字符集。它为每个字符分配了一个唯一的数字,称为码点(例如,U+0041 代表 'A')。然而,我们仍然需要一种方法将这些数字存储为二进制数据。

UTF-8(互联网之王)

UTF-8 是一种变长编码,每个字符使用 1 到 4 个字节。它向后兼容 ASCII。

  • 优点:对于西方语言非常高效,对数据损坏具有鲁棒性,是互联网的通用标准。

UTF-16

使用 2 或 4 个字节。它是 Windows (NTFS) 以及 Java 和 JavaScript 等许多编程环境的内置编码。

UTF-32

每个字符固定使用 4 个字节。虽然索引简单,但非常浪费内存。


2. 遗留及地区编码

在 Unicode 成为主流之前,不同地区使用自己的标准,其中许多标准至今仍在使用。

中文字符集(GB 家族)

  • GB2312:早期的简体中文标准。
  • GBK:GB2312 的扩展,支持更多字符。
  • GB18030:中国目前的强制性标准,支持简体和繁体中文,并与 Unicode 完全映射。

日语编码

  • Shift-JIS:历史上最流行的日语编码,广泛用于 Windows 和旧版网站。

韩语与繁体中文

  • EUC-KR:韩语常用的遗留编码。
  • Big5:繁体中文的标准,主要用于台湾和香港。

3. 西方遗留编码

ISO-8859-1 (Latin-1)

涵盖大多数西欧语言的 8 位编码。

Windows-1252

ISO-8859-1 的微小变体,是旧版本 Windows 的默认编码。


4. 技术细节:BOM 与字节序

字节顺序标记 (BOM)

BOM 是文本文件开头的一组特殊字节序列(例如 UTF-8 的 EF BB BF)。它告诉软件正在使用哪种编码和字节序。虽然对 UTF-16 很有用,但在 Web 环境中通常不建议在 UTF-8 中使用 BOM。

小端序 (Little Endian) 与 大端序 (Big Endian)

这与 UTF-16 和 UTF-32 相关,指字节在内存中存储的顺序。


对比总结

编码 每字符字节数 兼容性 最佳用途
UTF-8 1-4 ASCII Web, Linux, Mac
UTF-16 2 或 4 Windows, Java, JS
GB18030 1, 2, 或 4 GBK 中国政府合规性
ASCII 1 通用 遗留系统、纯英文

结论

全球已基本达成共识,将 UTF-8 作为数据交换的标准。然而,在处理遗留系统或特定地区的软件时,了解 GBKShift-JIS 等遗留编码仍然至关重要。如有疑问,在现代应用中请始终使用不带 BOM 的 UTF-8。