2010-05-31 198 views

回答

16

這將是類似如下:

public static String fromCharCode(int... codePoints) { 
    StringBuilder builder = new StringBuilder(codePoints.length); 
    for (int codePoint : codePoints) { 
     builder.append(Character.toChars(codePoint)); 
    } 
    return builder.toString(); 
} 

注意,鑄造char不能保證,因爲上班代碼點值可能會超過char(65535)的上限。 char成立於黑暗Java時代,當時Unicode 3.1尚未出現,超過了65535個字符。

更新:在String實際上已經a constructor taking an int[](因爲Java 1.5中引入的,不知道從頭頂),它正確地處理這個問題。如下以上可以簡化:

public static String fromCharCode(int... codePoints) { 
    return new String(codePoints, 0, codePoints.length); 
} 
+0

+1對Unicode的完美,但我懷疑的JavaScript函數可以正確處理代碼點大於65536 – 2010-05-31 21:44:34

+0

這似乎對於大多數工作值。我試圖: 新的字符串(新詮釋[] {141},0,1)在JavaScript打印,「?」但在java中沒有。 141是無效的嗎?我正在嘗試調試一些我從Javascript移植到Java的混淆代碼,並且對某些字符的結果不一致。 – jon077 2010-06-01 01:52:14

+0

這取決於字符編碼,這是一個完全不同的故事。 JS環境顯然使用與Java環境不同的字符編碼。至少,以上應該可以完美地處理像UTF-8這樣的Unicode字符編碼。 – BalusC 2010-06-01 02:05:24

相關問題