码表
Unicode:定义了字符的代码点(code point 字符码点,每个字符都有一个唯一的标识符),但并未定义字符序列如何存储和传输。它是通用的文本字符集,可以在任何系统上无缝地使用。
码点(code point)和码元(code unit)的区别:
码点表示 Unicode 表的键,是唯一的。既可以是基本平面的,也可以是辅助平面的。
- 基本平面(Basic Multilingual Plane,简称 BMP 或 plane 0):编码范围为[U+0000,U+FFFF],共占据65536(16**4)个字符。包含了大多数常用的字符。
- 增补平面(Supplementary Planes,也叫辅助平面, plan 1-...):编码范围为[U+10000,U+FFFFF],每个辅助平面包含 16**4 个字符(和BMP一样),最多 15 个辅助平面。
码元即编码元素,在不同的上下文中的含义不同。
- 基本平面的字符,使用一个码元来表示
- 辅助平面的字符需要使用代理对(surrogate pair)来表示,即两个16进制位的码元
编码
UTF(Unicode Transformation Formats): 它定义了 Unicode 代码点转换为字节序列的编码规则.
- UTF-8:可变长度的编码方式,使用 1 到 4 个字节(1个字节8比特位)表示一个字符。它与 ASCII 编码兼容。因它对英文文本的存储效率较高,广泛用于网页和电子邮件。
- UTF-16:使用 2 个或 4 个字节(16 位或 32 位)表示一个字符。它在处理某些亚洲语言(如中文、日文和韩文)时较为高效。
- UTF-32:使用 4 个字节表示一个字符。这使得字符的处理变得简单,但体积大、存储和传输效率低。
UCS-2
- Unicode 早期标准,编码范围[U+0000,U+FFFF],和新的 Unicode 标准的基本平面完全一致。
- 采用16bit编码,2个字节来表示一个字符。
- javascript 默认的处理字符编码的方式。