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