views:

309

answers:

1

I have a query string passed in through an HTTP request that has this character in it:

%u54E6

And I'd like to generate a string that contains the actual Chinese character so I can use it in a different part of the application, I've tried using this code:

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

Unfortunately, all I'm getting is 'u54E6' printed to the console for the value, instead of the Chinese character.

Is there an easy way to convert the original string to a Unicode character in Java?

+3  A: 

You're trying to use \u escapes at run time. These are compile-time only. Instead, you should be able to do something like:

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());
Laurence Gonsalves
BTW: I was originally using StringBuilder, but it turns out Matcher only works with StringBuffer.
Laurence Gonsalves
In Java 6, appendReplacement/appendTail work only for StringBuffer, not StringBuilder.
Kathy Van Stone