响应返回JSON数据时出现的unicode编码问题

问题描述

在获取响应回来的数据时,封装的接口往往使用unicode编码格式,因为这样可以更好的传输中文数据,由于我们获取到的数据是字符串的形式,所以无法便捷的进行数据加工。

响应返回JSON数据时出现的unicode编码问题

解决策略

可以使用一个自定义的方法来将json中的unicode编码转换回中文字符,这样我们就可以对其进行加工:

public static String decodeUnicode(String theString) {
        char aChar;
        int len = theString.length();
        StringBuffer outBuffer = new StringBuffer(len);
        for (int x = 0; x < len;) {
            aChar = theString.charAt(x++);
            if (aChar == '\\') {
                aChar = theString.charAt(x++);
                if (aChar == 'u') {
                    // Read the xxxx
                    int value = 0;
                    for (int i = 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:
                                throw new IllegalArgumentException("Malformed   \\uxxxx   encoding.");
                        }
                    }
                    outBuffer.append((char) value);
                } else {
                    if (aChar == 't')
                        aChar = '\t';
                    else if (aChar == 'r')
                        aChar = '\r';
                    else if (aChar == 'n')
                        aChar = '\n';
                    else if (aChar == 'f')
                        aChar = '\f';
                    outBuffer.append(aChar);
                }
            } else
                outBuffer.append(aChar);
        }
        return outBuffer.toString();
    }

测试用例

上述代码的返回值的类型是String,传参的类型也是String,所以在你需要调用的时候将其响应体中的String类型获取出来放入参数。

//响应回的代码是对象类型。
ServiceResponse response = client.getResponse(request);
//但是响应体对象中有我们需要的String_json时我们要将他获取出来,比如
String strRes=response.getString;
//将此str放入传参中调用方法
方法一:
String s1=decodeUnicode(strRes);
方法二:
String s1=decodeUnicode(response.getString);

测试结果

响应返回JSON数据时出现的unicode编码问题


参考链接:

json中包含Unicode转码问题

上一篇:LZ77压缩算法编码Python实现原理图解


下一篇:场景体验报告——冬季实战营第四期