通用字符编码
ASCII
诞生于 20 世纪 60 年代,最基础的单字节编码,主要用于显示现代英语。
使用 7 位二进制来表示一个字符,共能表示 128 个字符(包括大小写字母、数字和控制字符)。
无法表示中文、日文等非英语国家的文字。
使用场景:底层计算机系统与协议
iso-8859-1(Latin-1)
前 128 个字符(0x00 - 0x7F)与 ASCII 完全一致,涵盖了基础英文、数字和控制字符。利用了字节中原本闲置的最高位(第 8 位),将编码范围从 ASCII 的 128 个扩展到了 256 个(0x00 - 0xFF)。
在早期的 HTTP 1.1 协议规范中,如果没有明确指定字符集,默认就会被认为是 ISO-8859-1。随着 UTF-8 的全面普及,ISO-8859-1 已经逐渐退居二线,主要存在于旧的遗留系统、早期的电子邮件附件或特定的数据库配置中。
使用场景:早期互联网
Unicode
为了解决各国编码不通导致的“乱码”问题而设计的万国码,全球统一的“字符集”。
为世界上每一种语言的每一个字符都设定了唯一的码点。
Unicode 本身只是一张“清单”,规定了某个字符对应哪个数字,但并没有规定这个数字在计算机里具体怎么存(即没有规定占用几个字节)。
使用场景:全球化软件
UTF-8
最流行的“实现方式”,是 Unicode 的一种针对传输和存储的压缩优化实现。
UTF-8是一种变长编码。对于简单的英文字母,它只用 1 个字节(完全兼容 ASCII)。对于汉字,通常使用 3 个字节。
UTF-8在节约空间的同时,解决了全球字符的显示问题,是目前互联网上使用最广泛的编码方式。
使用场景:现代互联网网页、各类编程语言默认编码
中国字符编码
GB2312
1980 年发布,是中国制定的第一个汉字编码标准。为双字节编码。为了兼容 ASCII,它规定:如果一个字节的值小于 127,则按 ASCII 处理;如果大于 127,则将连续的两个字节组合起来表示一个汉字。
包含 6763 个汉字,分为一级汉字(常用)和二级汉字(不常用)。此外还包含拉丁字母、希腊字母、日文假名及数学符号等。由于收录字数较少,许多人名、地名、古籍中的生僻字以及繁体字无法显示。
使用场景:早期中文操作系统与软件
GBK
1995 年发布,“K”代表“扩展”。为解决 GB2312 字数不足的问题而制定,且完全向下兼容 GB2312。
GBK 利用了 GB2312 中未使用的编码空间,极大地扩充了字符量。 包含 21003 个汉字,涵盖了绝大多数生僻字、繁体字,甚至收录了部分日文和韩文中的汉字。
使用场景:Windows 中文版长期默认编码
GB18030
2000 年发布,2022 年更新,不仅包含前两者的所有字符,还增加了少数民族文字,并且是强制性的国家标准,在逻辑上兼容 Unicode。
使用场景:中国大陆政府、金融、电信等强合规行业系统
日本字符编码
Shift-JIS
由微软等公司开发。利用了 ASCII 码中未使用的空间来存放日文,不需要转义序列,曾是 Windows 系统在日本的主流编码。
Shift-JIS 是一种变长编码,根据字符的不同使用不同长度的字节:
- 单字节:完全兼容 ASCII 码,包含半角假名,范围通常在 0xA1 到 0xDF 之间。
- 双字节:用于表示日文汉字和全角假名。第一字节(高位字节)通常在 0x81-0x9F 或 0xE0-0xFC 范围内。第二字节(低位字节)则避开了某些控制字符位,确保了数据传输的稳定性。
使用场景:日本本地 Windows 软件与网页