响应返回JSON数据时出现的unicode编码问题-阿里云开发者社区

开发者社区> AIoT_浠博> 正文

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

简介: 在数据传输的过程中,为了更好的传输中文,json使用了Unicode编码。也就是说这样一来,我们在解析json之前,就得要先将json数据中的Unicode编码转换为我们使用的中文。这样返回出来的数据才是我们真正需要的数据,那我们应该如何将json字符串中的unicode编码转为中文字符呢?
+关注继续查看

问题描述

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

image.png

解决策略

可以使用一个自定义的方法来将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);

测试结果

image.png


参考链接:

json中包含Unicode转码问题

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ajax请求后台,返回json格式数据,模板!
添加一个用户的时候,需要找出公司下所有的部门,和相应部门下的角色,利用ajax请求,实现联动技术。将返回的json格式数据,添加到select标签下。           //加载出部门的信息            function loadGroup(){                            $.
920 0
MySQL---数据库从入门走向大神系列(三)-修改数据库编码/DOS窗口编码
如何查看与修改数据库的编码,如何修改dos窗口的显示编码,都在本篇详细讲解。 查看当前数据库的编码: show variables where variable_name like 'character%'; 如果出现了中文乱码,我们只要看: character_set_client —客户端的编码 character_set_connection —连接的编码(传输时的编码) character_set_results — 最后的输出编码 只要保证这三个编码是相同的,且编码集有中文,中文就不会出现乱码。
1224 0
像职业选手样编码:地道Python
Code Like a Pythonista: Idiomatic Python David Goodger goodger@python.org http://python.net/~goodger In this interactive tutorial, we'll cover man...
1035 0
新型可扩展的数据保护方式——擦除编码
一、概述   在之前存储系统中,一般都采用RAID技术来对数据进行保护,一旦阵列中某块硬盘损坏,可通过RAID技术所形成的镜像来对丢失数据进行恢复。但随着海量数据问题的出现,RAID越来越难发挥其作用。
1116 0
+关注
28
文章
0
问答
来源圈子
更多
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载