2009-12-21 77 views

回答

7

Java字符串是UTF-16(大端),所以Unicode代碼點可以是一個或兩個字符。在此編碼下,Java可使用字符0xD835 0xDD0A(字符串文字"\uD835\uDD0A")表示代碼點U + 1D50A(MATHEMATICAL FRAKTUR CAPITAL G)。 Character類提供了用於轉換代碼點/從代碼點轉換的方法。

// Unicode code point to char array 
char[] math_fraktur_cap_g = Character.toChars(0x1D50A); 
+0

爲什麼我們不使用'int'類型' math_fraktur_cap_g'讀取非BMP的代理對?如[這裏]所述(https://stackoverflow.com/a/13112474/3317808) – overexchange 2017-11-09 06:54:43

13
http://en.wikipedia.org/wiki/UTF-16

在計算中,UTF-16(16位 UCS/Unicode轉換格式)是 Unicode的可變長度字符編碼 ,能編碼 整個Unicode劇目。 編碼形式將每個字符映射到一個16位字的序列 。字符 被稱爲代碼點,而16位字被稱爲代碼單元。 對於基本文字 多語言平面(BMP),得到的 編碼是一個單一的16位字。對於其他平面中的 字符, 編碼將產生一對 16位字,一起稱爲 替代對。無論代碼點是什麼,除了替代碼點 U + D800-U + DFFF(它們不是 個字符)以外,所有可能的代碼 指向UTF-16的唯一地址映射爲U + 0000至U + 10FFFF, 當前或未來的人物分配 或使用。

+0

請參閱我以前的答案,以瞭解如何正確地遍歷Java字符串中的所有字符。 http://stackoverflow.com/questions/1527856/how-can-i-iterate-through-the-unicode-codepoints-of-a-java-string/1527891#1527891 – 2009-12-21 18:02:05

3

Java對字符串使用UTF-16 - 基本上意味着字符的寬度是可變的。它們中的大多數適合16位,但基本多語言窗格之外的那些佔用32位。這與UTF-8方案非常相似。