支持任何Unicode字符串的转换。
源代码:
private static final Pattern REG_UNICODE = Pattern.compile("[0-9A-Fa-f]{4}");
public static String unicode2String(String str) {
StringBuilder sb = new StringBuilder();
int len = str.length();
for (int i = 0; i < len; i++) {
char c1 = str.charAt(i);
if (c1 == '\\' && i < len - 1) {
char c2 = str.charAt(++i);
if (c2 == 'u' && i <= len - 5) {
String tmp = str.substring(i + 1, i + 5);
Matcher matcher = REG_UNICODE.matcher(tmp);
if (matcher.find()) {
sb.append((char) Integer.parseInt(tmp, 16));
i = i + 4;
} else {
sb.append(c1).append(c2);
}
} else {
sb.append(c1).append(c2);
}
} else {
sb.append(c1);
}
}
return sb.toString();
}
测试用例:
String unicode = "\\u672\\u6728gfs\\u5B50\\u96C5\\u4F26lxl";
String result = unicode2String(unicode);
Assert.assertEquals("\\u672木gfs子雅伦lxl", result);
String unicode = "\\u6728\\u5B50\\u96C5\\u4F26";
String result = unicode2String(unicode);
Assert.assertEquals("木子雅伦", result);