最近在做facebook相关的工作。主要就是从facebook提供的接口,获取数据。但是取到的数据里,如果包含汉字,我取到的就是unicode字符串,例如:\u6f5c\u5728\u5ba2\u6237\u5f00\u53d1
这就需要我们将数据存入数据库前,将这种数据转换成汉字,存进去,也便于前台做展现。
具体见代码:
public static String decodeUnicode(String dataStr) {
dataStr = StringEscapeUtils.unescapeJava(dataStr);//去掉转义字符
if(dataStr.indexOf("\\u") == -1)
return dataStr;
int start = 0;
int end = 0;
final StringBuffer buffer = new StringBuffer();
while (start > -1) {
end = dataStr.indexOf("\\u", start + 2);
String charStr = "";
if (end == -1) {
charStr = dataStr.substring(start + 2, dataStr.length());
} else {
charStr = dataStr.substring(start + 2, end);
}
char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串。
buffer.append(new Character(letter).toString());
start = end;
}
return buffer.toString();
}
注意:上面的代码中StringEscapeUtils.unescapeJava(dataStr)这句话是重点。为什么会加这句代码?这是自己debug出来的。
发现一个有趣的问题,自己百思不得其解:从facebook上取到的值,用debug看,取到的字符串从肉眼看是\u6f5c\u5728\u5ba2\u6237\u5f00\u53d1,但实际上是\\u6f5c\\u5728\\u5ba2\\u6237\\u5f00\\u53d1。所以要去掉转义字符,加上StringEscapeUtils.unescapeJava(dataStr)。StringEscapeUtils是org.apache.commons.lang3.StringEscapeUtils包中的。
有知道原理的小哥哥小姐姐,也欢迎留言,共同探讨~~