Java语言使用UTF-16这种字符集编码。
Unicode编码字符集的代码点(code point)范围在U+0000 到 U+10FFFF间。总数是2^20(增补字符) + 2^16 (BMP)
代码点 | 名称 |
---|---|
U+0000 - U+FFFF | Basic Multilingual Plane (BMP) ,基本多语言平面 |
U+10000 - 10FFFF | supplementary characters,增补字符 |
- 在java(UTF-16)中,增补字符表示为一对char值,第一个值取自高代理项范围,即 (\uD800-\uDBFF),大小3FF,第二个值取自低代理项范围,即 (\uDC00-\uDFFF),大小3FF。增补字符数量为 210 * 210,即 220。
- 所以一个char值表示Basic Multilingual Plane (BMP) 代码点,其中还包括代理项代码点。恰好可以用两个字节表示。所以在java中char类型可以表示BMP字符集。
- 所以int值表示所有 Unicode 码点,包括增补码点。int的 21 个低位(最低有效位)用于表示 Unicode 代码点,并且 11 个高位(最高有效位)必须为零。