将unicode字符串转换成汉字

        最近在做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包中的。

        有知道原理的小哥哥小姐姐,也欢迎留言,共同探讨~~



    

你可能感兴趣的:(字符串,java)