1,如何把Unicode转化为正常字符呢?
/** * 把unicode转化为中文 * @param str * @return */ public static String unicodeToChinese(String str) { if (IsChineseUtil.isHasChinses2(str))//判断是否有中文字符 return str; if (str.indexOf("\\u") == -1 || str == null || "".equals(str.trim())) {/*若不是unicode,则直接返回*/ return str.replaceAll("\\\\ ", " ");//删掉英文中的\,such as "default\ value1" /* 主要是针对 zk 中的国际化问题 */ } StringBuffer sb = new StringBuffer(); if(!str.startsWith("\\u")){/*若开头不是unicode,如“abc\u4e2d\u56fd” */ int index=str.indexOf("\\u"); sb.append(str.substring(0, index)); str=str.substring(index); } if (str.endsWith(":")) /*如“\u4e2d\u56fd:” */{ str = str.substring(0, str.length() - 1); } String[] chs = str.trim().split("\\\\u"); for (int i = 0; i < chs.length; i++) { String ch = chs[i].trim(); if (ch != null && !"".equals(ch)) { int length_ch=ch.length(); if(length_ch>4){ length_ch=4; }//中文的长度是4,英文的长度是2 sb.append((char) Integer.parseInt(ch.substring(0, length_ch), 16));//按照十六进制解析 if (ch.length() > 4) { sb.append(ch.substring(4)); } } } return sb.toString(); }
应用:
selectContent=Conversion.unicodeToChinese(selectContent);
依赖的方法:
public static boolean isHasChinses2(String str) { String encodeName = "UTF-8"; char[] chars = str.toCharArray(); for (int i = 0; i < chars.length; i++) { try { char c = chars[i]; int leng = getEncodeLength(c, encodeName); // System.out.println(singleStr + "\t" + leng); if (leng == 9)//表示是中文字符 { // System.out.println("有中文"); return true; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } } return false; } public static int getEncodeLength(String str, String encodeName) throws MyException, UnsupportedEncodingException {//返回值为9 的话,则说明有中文。 if (str.length() != 1) { throw new MyException("超过一个字符"); } String encod = URLEncoder.encode(str, "UTF-8"); return encod.length(); } public static int getEncodeLength(char c, String encodeName) throws MyException, UnsupportedEncodingException {//返回值为9 的话,则说明有中文。 return getEncodeLength(String.valueOf(c), encodeName); }