在进行web开发时,例如编写web网站,爬取网站时,经常会遇到一些字符变成了unicode码的情形。如"<"变成\u003c等,这样处理起来非常麻烦,用str.replace()函数也处理不了。为了解决这个问题,我们查找了unicode的编码机制,编写了进行转换的函数。
/*
* 这里给出了两个静态方法,可以直接用类名调用,尽量调用第一个decode2(String) 这个函数
*/
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author OldKing
*/
public class Unicode2char {
/**
* 修改字符串中的unicode码
*
* @param s 源str
* @return 修改后的str
*/
public static String decode2(String s) {
StringBuilder sb = new StringBuilder(s.length());
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c == '\\' && chars[i + 1] == 'u') {
char cc = 0;
for (int j = 0; j < 4; j++) {
char ch = Character.toLowerCase(chars[i + 2 + j]);
if ('0' <= ch && ch <= '9' || 'a' <= ch && ch <= 'f') {
cc |= (Character.digit(ch, 16) << (3 - j) * 4);
} else {
cc = 0;
break;
}
}
if (cc > 0) {
i += 5;
sb.append(cc);
continue;
}
}
sb.append(c);
}
return sb.toString();
}
/**
* 获取修复后的字符串
*
* @param str
* @return
*/
public static String getFixStr(String str) {
String ret = str;
Pattern p = Pattern.compile("(\\\\u.{4})");
Matcher m = p.matcher(ret);
while (m.find()) {
String xxx = m.group(0);
ret = str.replaceAll("\\" + xxx, decode2(xxx));
}
return ret;
}
}