字符编码对照表

字符编码(Charset)决定文字如何映射为字节。本表覆盖开发中常见的 ASCII、UTF-8、GBK、GB2312、Big5、ISO-8859-1 等编码的含义与典型用途,解决乱码与编码选择问题。

编码说明典型用途
ASCII7 位字符集,覆盖英文字母、数字与基础符号(0-127)最古老的基础编码,所有现代编码的兼容子集
UTF-8Unicode 的可变长编码,1-4 字节Web 默认编码,覆盖全球字符,中文 3 字节
UTF-16Unicode 的 2 或 4 字节编码Windows/Java/.NET 内部常用,JS 字符串底层
UTF-32Unicode 的固定 4 字节编码处理简单但体积大,较少用于传输
ISO-8859-1Latin-1,单字节覆盖西欧语言HTTP 默认编码,常与 Windows-1252 混淆
Windows-1252CP1252,Latin-1 超集,补了 € 等可打印字符Windows 西欧默认,浏览器常把 8859-1 当 1252 解析
GBK汉字内码扩展,双字节覆盖繁简中文中文 Windows 旧默认,兼容 GB2312
GB2312早期简体中文双字节编码简体中文基础字符集,被 GBK 全面兼容
GB18030国标强制标准,覆盖中日韩及少数民族文字中国政府/金融系统要求,兼容 GBK
Big5大五码,繁体中文双字节编码港台地区传统中文编码
Shift-JIS日文编码,单/双字节混合日本 Windows 默认日文编码
EUC-KR韩文编码,双字节韩国传统韩文编码

常见问题

UTF-8 和 GBK 有什么区别?

UTF-8 是 Unicode 的可变长编码,一套字符集覆盖全球语言,是 Web 事实标准;GBK 是中文双字节编码,只覆盖中英文,体积更小但无法表示其他语言。现代项目应统一使用 UTF-8 以避免乱码。

为什么会出现乱码(mojibake)?

当文本以 A 编码保存、却用 B 编码解读时就会出现乱码。最常见是中文以 GBK 保存却被当成 UTF-8(或反之)读取。确保文件、数据库、HTTP 头(charset=utf-8)三方编码一致即可避免。

ISO-8859-1 和 Windows-1252 一样吗?

不一样但常被混用。8859-1 在 0x80-0x9F 是控制字符;1252 在这段放了大量可打印字符(如 €、智能引号)。浏览器在声明 8859-1 时实际常按 1252 解析,因此用 1252 更明确。

emoji 用哪种编码?

emoji 属于 Unicode,UTF-8 下通常占 4 字节(部分新 emoji 更多),UTF-16 下用代理对(surrogate pair)表示。只要系统用 UTF-8,emoji 就能正确存储与显示。