Unicode, UTF, and ASCII
ASCII
ASCII (American Standard Code for Information Interchange), 一种字符编码表,最早用于英语字符。它只定义了 128 个字符,包括大小写英文字母、数字、标点符号和一些控制符。每个字符用 7 位二进制表示,储存在一个byte里。但是 ASCII 只能表示英文字符,不能表示中文、日文等非拉丁字符。
Unicode
Unicode 目标是为世界上所有字符提供唯一编号。Unicode 为全世界所有字符映射了一个唯一的码点,形式为 U+XXXX。比如
- ‘A’ → U+0041
- ‘你’ → U+4F60
Unicode 是字符集合,它告诉你“字符和编号的对应关系”,但不指定存储方式。
UTF
UTF (Unicode Transformation Format) 是将 Unicode 的码点转换成实际二进制字节的算法。
-
为什么需要 UTF?
因为 Unicode 的码点范围很大(超过 100 万个),如果直接存,每个字符都必须用很大的空间(比如 4 字节)来保证容纳最大的那个号,这会导致严重的空间浪费。 -
UTF-32
无论你是 ‘A’ 还是 ‘中’,通通给 4 个字节(32位)。但对于纯英文文档,体积是 ASCII 的 4 倍,浪费空间。 -
UTF-8
可变长度,使用 1~4 字节表示字符。UTF-8 节省空间,广泛用于网络传输,并且向后兼容 ASCII。- ASCII范围:1 字节
- U+0080~U+07FF(欧洲字符):2 字节
- U+0800~U+FFFF(常用汉字):3 字节
- U+10000~U+10FFFF(Emoji/生僻字):4 字节
-
即然 UTF-8 长度不固定,如何解码?
UTF-8 通过每个字节开头的标志位,来告诉计算机这个字符占多长。- 0xxxxxxx → 1 字节
- 110xxxxx → 2 字节
- 1110xxxx → 3 字节
- 11110xxx → 4 字节
Unicode, UTF, and ASCII
http://example.com/2026/02/02/CS_Basis/encode/