2009-10-14 89 views
3

這可能是一個愚蠢的問題,但是...說我有一個String4e59它代表一個特殊的Unicode字符。如何將\u添加到該字符的開頭,以便它正確顯示?我試過最簡單的解決方案:Java unicode問題

String str = "4e59"; 
System.out.println("\\u"+str); 

和其他幾個變種,我錯過了什麼?

回答

9

ü在編譯時解析的\,無法運行時間,所以只要你的前綴字符串以「\ U」是行不通的。

可以使用的Integer.parseInt在運行時做此分析:

System.out.println((char)Integer.parseInt("4e59", 16)); 
+2

如果brandon有興趣,這也適用: char c = 0x4E59; – Gunslinger47 2009-10-14 06:21:00

4

您需要將其轉換爲char

System.out.println((char) Integer.parseInt("4e59", 16)); 
+0

Integer.valueOf()返回整數對象,然後需要被轉換爲int,(然後到一個char),這是多餘的。 Integer.parseInt()直接返回一個int – newacct 2009-10-14 08:13:00

+0

這是真的。我改變了我的答案。 – 2009-10-14 18:21:32

5

其他人已經與如何做到這一點回答,但如果你有興趣,我可以解釋爲什麼在前面加上"\u"沒有工作:"\uXXXX"序列在編譯時由javac(由詞法分析器實際上是編譯的第一步)轉換爲相應的unicode字符。在你的代碼中,詞法分析器看到一個只包含"\u"的字符串,因此不會觸及它。

\uXXXX編碼將工作在任何地方,而不僅僅是在字符串內部。這兩個行的是相同的,如果你把他們在一個Java源文件:

int i; 

\u0069\u006E\u0074 \u0069\u003B 
+0

母牛的聖母! – Amarghosh 2009-10-14 09:52:47