2009-09-29 62 views
1

我通過HTTP請求中傳遞的查詢字符串具有這種性格在裏面:轉換爲Java的Unicode

%u54E6

而且我想產生一個字符串包含實際的中國性格讓我可以在應用程序的不同部分使用它,我已經使用這個代碼的嘗試:

String foo = "%u54E6"; 
String ufoo = new String(foo.replaceAll("%u([a-zA-Z0-9]{4})", "\\" + "u$1")); 
System.out.println("ufoo: " + ufoo); 

不幸的是,我得到的是「u54E6」打印到控制檯的價值,而不是漢字。

有沒有一種簡單的方法將原始字符串轉換爲Java中的Unicode字符?

回答

3

您正試圖在運行時使用\u轉義符。這些只是編譯時間。相反,你應該可以做這樣的事情:

String foo = "%u54E6"; 
Pattern p = Pattern.compile("%u([a-zA-Z0-9]{4})"); 
Matcher m = p.matcher(foo); 
StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    m.appendReplacement(sb, 
     String.valueOf((char) Integer.parseInt(m.group(1), 16))); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); 
+0

順便說一句:我最初使用StringBuilder,但事實證明,匹配器只適用於StringBuffer。 – 2009-09-29 16:35:07

+0

在Java 6中,appendReplacement/appendTail僅適用於StringBuffer,不適用於StringBuilder。 – 2009-09-29 16:40:24