https://docs.oracle.com/en/ja...
Java 版本与 Unicode 版本对应关系
Java release | Unicode version |
Java SE 15 | Unicode 13.0 |
Java SE 13 | Unicode 12.1 |
Java SE 12 | Unicode 11.0 |
Java SE 11 | Unicode 10.0 |
Java SE 9 | Unicode 8.0 |
Java SE 8 | Unicode 6.2 |
Java SE 7 | Unicode 6.0 |
Java SE 5.0 | Unicode 4.0 |
Java SE 1.4 | Unicode 3.0 |
JDK 1.1 | Unicode 2.0 |
JDK 1.0.2 | Unicode 1.1.5 |
Unicode 一致性
char 类型以及封装类 java.lang.Character 的字段和方法是根据 Unicode 标准中的字符信息定义的,特别是作为 Unicode 字符数据库一部分的 UnicodeData文件。此文件为每个分配的 Unicode 代码点或字符范围指定属性,包括名称和类别。该文件可从 Unicode 联盟 http://www.unicode.org 获得。
Unicode 字符表示
char数据类型(以及对象封装的值 )Character基于原始 Unicode 规范,该规范将字符定义为固定宽度的 16 位实体。此后,Unicode 标准已更改为允许表示需要超过 16 位的字符。合法码点的范围现在是 U+0000 到 U+10FFFF,称为Unicode scalar value。(请参阅Unicode 标准中 U+ n符号 的 定义。)
从 U+0000 到 U+FFFF 的字符集有时称为基本多语言平面 (BMP)。 码位大于 U+FFFF 的字符称为补充字符。Java 平台在 char 数组和 String 和 StringBuffer 类中使用 UTF-16 表示。在此表示中,补充字符表示为一对 char 值,第一个来自高代理(high-surrogates) 范围 (\uD800-\uDBFF),第二个来自 低代理(low-surrogates) 范围 (\uDC00-\uDFFF)。
因此,一个 char 值表示基本多语言平面 (BMP - Basic Multilingual Plane) 代码点,包括代理代码点或 UTF-16 编码的代码单元。一个 int 值表示所有 Unicode 代码点,包括补充代码点。用整型 int 的低 21 位表示 Unicode 代码点,高 11 位必须为零。除非另有说明,否则关于补充字符和代理 char 值的行为如下:
- 只接受char值的方法不支持补充字符。它们将char代理范围中的值视为未定义的字符。例如, Character.isLetter('\uD840')返回false,即使此特定值后跟字符串中的任何低代理值将代表一个字母。
- 接受int值的方法支持所有 Unicode 字符,包括补充字符。例如,Character.isLetter(0x2F81A)返回 true是因为代码点值表示一个字母(CJK 表意文字)。
在 Java SE API 文档中,Unicode 代码点(Unicode code point )用于 U+0000 到 U+10FFFF 范围内的字符值,Unicode 代码单元(Unicode code unit)用于 UTF-16 编码 char 的代码单元的 16 位值。有关 Unicode 术语的更多信息,请参阅 Unicode 词汇表。
总结
看完以上文档,你能回答标题的问题了吗?
欢迎在评论里写下你的答案
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。