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 詞彙表。
總結
看完以上文檔,你能回答標題的問題了嗎?
歡迎在評論裏寫下你的答案