今天在解析json数据的时候得到了一堆这样的数据:{"errNum":0,"errMsg":"success","retData":[{"title":"\u6536\u5e9f\u54c1\u5927\u53d4\u521a\u4e0a\u53f0\uff0c\u5c31\u60e8\u906d\u8bc4\u59d4\u706d\u706f\uff0c\u4f46\u63a5\u4e0b\u6765\u5168\u573a\u90fd\u9707\u60ca\u4e86\uff01","url":"http:\/\/toutiao.com\/group\/6263036756505920002\/","abstract":"\u8ba2\u9605\u6211\u83b7\u53d6\u66f4\u591a\u7cbe\u5f69\u5185\u5bb9\uff01","image_url":"http:\/\/p1.pstatp.com\/list\/2f90009a31a7ee8bb15"}]}
这是因为,为了更好的传输中文,json进行了Unicode编码。
这样一来,我们在解析json之前,就得要先将json数据中的Unicode编码转换为我们使用的中文;
一:http请求数据返回json中string字段包含unicode的转码
- publicstaticStringdecodeUnicode(StringtheString){
- charaChar;
- intlen=theString.length();
- StringBufferoutBuffer=newStringBuffer(len);
- for(intx=0;x<len;){
- aChar=theString.charAt(x++);
- if(aChar==‘\\‘){
- aChar=theString.charAt(x++);
- if(aChar==‘u‘){
- //Readthexxxx
- intvalue=0;
- for(inti=0;i<4;i++){
- aChar=theString.charAt(x++);
- switch(aChar){
- case‘0‘:
- case‘1‘:
- case‘2‘:
- case‘3‘:
- case‘4‘:
- case‘5‘:
- case‘6‘:
- case‘7‘:
- case‘8‘:
- case‘9‘:
- value=(value<<4)+aChar-‘0‘;
- break;
- case‘a‘:
- case‘b‘:
- case‘c‘:
- case‘d‘:
- case‘e‘:
- case‘f‘:
- value=(value<<4)+10+aChar-‘a‘;
- break;
- case‘A‘:
- case‘B‘:
- case‘C‘:
- case‘D‘:
- case‘E‘:
- case‘F‘:
- value=(value<<4)+10+aChar-‘A‘;
- break;
- default:
- thrownewIllegalArgumentException(
- "Malformed\\uxxxxencoding.");
- }
- }
- outBuffer.append((char)value);
- }else{
- if(aChar==‘t‘)
- aChar=‘\t‘;
- elseif(aChar==‘r‘)
- aChar=‘\r‘;
- elseif(aChar==‘n‘)
- aChar=‘\n‘;
- elseif(aChar==‘f‘)
- aChar=‘\f‘;
- outBuffer.append(aChar);
- }
- }else
- outBuffer.append(aChar);
- }
- returnoutBuffer.toString();
- }
二、普通string含有unicode转码方法