问题描述
在获取响应回来的数据时,封装的接口往往使用unicode编码格式,因为这样可以更好的传输中文数据,由于我们获取到的数据是字符串的形式,所以无法便捷的进行数据加工。
解决策略
可以使用一个自定义的方法来将json中的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') { // Read the xxxxintvalue=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 \\uxxxx encoding."); } } 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); } } elseoutBuffer.append(aChar); } returnoutBuffer.toString(); }
测试用例
上述代码的返回值的类型是String,传参的类型也是String,所以在你需要调用的时候将其响应体中的String类型获取出来放入参数。
//响应回的代码是对象类型。ServiceResponseresponse=client.getResponse(request); //但是响应体对象中有我们需要的String_json时我们要将他获取出来,比如StringstrRes=response.getString; //将此str放入传参中调用方法方法一:Strings1=decodeUnicode(strRes); 方法二:Strings1=decodeUnicode(response.getString);
测试结果