2009-09-29 63 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