我想將CJK ExtB計劃中包含Unicode字符的Java字符串轉換爲十進制NCR。在Java/Scala中將Unicode(CJK ExtB)字符轉換爲十進制NCR
例如(您可以用http://people.w3.org/rishida/tools/conversion/嘗試):
- 「遊鍚堃」 應該轉換爲
游鍚堃
- 「懷」 應該轉換爲
𧦧懷
這裏是我試過(在斯卡拉):
def charToHex(char: Char) = "&#%d;" format(char.toInt)
def stringToHex (string: String) = string.flatMap(charToHex)
println (stringToHex("遊鍚堃")) // 游鍚堃
println (stringToHex("懷")) // ��懷
println ("懷".toCharArray().length) // Why it is 3?
正如你可以se e,它在第一種情況下正確轉換,三個unicode字符轉換爲三個NCR。
但在第二種情況「懷」中,只有兩個unicode字符,但Java/Scala似乎認爲它是一個包含三個字符的字符串。
那麼,這裏發生了什麼,我怎麼能正確地轉換第二種情況就像我提到的網站上的轉換器?非常感謝。
更新:
- 我的源代碼文件是使用UTF-8。
- 這裏是 「懷」 .toCharArray()的結果
char[] = ?, char.toInt = 55390
char[] = ?, char.toInt = 56743
char[] = 懷, char.toInt = 25079
現在我想我知道發生了什麼。字符「」在UTF-16中編碼爲0xD85E 0xDDA7,即4字節而不是2字節。所以在轉換爲char數組時,需要2個元素,其中數據類型char
只能表示2個字節。
謝謝,這正是我需要的! – 2011-03-07 10:54:42