在进行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; } }