ListerCi
ListerCi
采纳率60%
2017-12-14 07:05 阅读 6.2k
已采纳

Java后台获取前端POST请求中Json数据的乱码问题

10

前端上传的Json数据如下所示:

 {
    "name":"百度跳线",//产品名字
    "data":[

        {"num": 1, "gongxu": "bq"}//gongxu:工序名称,名字已经统一。num:排名顺序

        {"num": 2, "gongxu": "rs"}

        {"num": 3, "gongxu": "slsjzp"}
        //.......
        //.......
    ]
}

在Java后台的Servlet中通过以下代码获取请求体:

 request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 1. 获取请求体中的内容
        BufferedReader br = new BufferedReader(
                new InputStreamReader(request.getInputStream(), "utf-8"));
        StringBuffer sb = new StringBuffer("");
        String temp;
        while ((temp = br.readLine()) != null) {
            sb.append(temp);
        }
        br.close();
        String params = sb.toString();
        System.out.println(params);

最后得出的结果却包含乱码:

 name=%E6%9D%A1%E7%BA%BF&data%5B0%5D%5Bnum%5D=1&data%5B0%5D%5Bgongxu%5D=ym&data%5B1%5D%5Bnum%5D=2&data%5B1%5D%5Bgongxu%5D=yj&data%5B2%5D%5Bnum%5D=3&data%5B2%5D%5Bgongxu%5D=yinddj

这里不仅有乱码,而且data字段也有好几个,请问怎么样才能把前端传的数据原封不动的取出来呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

10条回答 默认 最新

  • 已采纳
    a185137515 a185137515 2017-12-14 07:09

    url 解码,
    结果
    name=条线&data[0][num]=1&data[0][gongxu]=ym&data[1][num]=2&data[1][gongxu]=yj&data[2][num]=3&data[2][gongxu]=yinddj

    http://tool.chinaz.com/tools/urlencode.aspx

    点赞 1 评论 复制链接分享
  • pinolliuf pinolliuf 2017-12-14 07:10

    这不是乱码吧。
    这个是url 使用了urlencode进行的编码, 你需要使用 urldecode解码。

    data多个是因为你传的数组,data[0], data[1]...

    点赞 3 评论 复制链接分享
  • avenccssddnn ipple1986 2017-12-14 07:46

    那不叫乱码,那是urlencode了,decode一下即可。

    点赞 1 评论 复制链接分享
  • qq_34986273 沉思的豆果 2017-12-14 07:12
    点赞 评论 复制链接分享
  • mgcmgc mgcmgc 2017-12-14 07:36

    {
    "name":"百度跳线",
    "data":[
    {"num": 1, "gongxu": "bq"},
    {"num": 2, "gongxu": "rs"},
    {"num": 3, "gongxu": "slsjzp"}
    ]
    }
    数据格式正确吗?

    点赞 评论 复制链接分享
  • en_joker 孤芳不自賞 2017-12-14 07:59

    这不是乱码,是unicode码,你转一下就可以了。
    转换方法推荐下文。
    http://blog.csdn.net/z69183787/article/details/25742307

    点赞 评论 复制链接分享
  • DTB2015 DTB2015 2017-12-14 08:16

    没有乱码你按照自定义接受

    点赞 评论 复制链接分享
  • liushimiao0104 小卒过河0104 2017-12-14 08:45

    web.xml中添加编码过滤器嘛

    点赞 评论 复制链接分享
  • chy6575 Chenay_ 2017-12-18 09:19
    private Map<String, String> decodeExtras(String extras) {
        Map<String, String> results = new HashMap<String, String>();
        try {
            URI rawExtras = new URI("?" + extras);
            List<NameValuePair> extraList = URLEncodedUtils.parse(rawExtras, "UTF-8");
            for (NameValuePair item : extraList) {
                results.put(item.getName(), item.getValue());
            }
        } catch (URISyntaxException e) {
          Log.w(TAG, "Invalid syntax error while decoding extras data from server.");
        }
        return results;
    }
    
    点赞 评论 复制链接分享
  • Oliver_wq 奥利弗呀 2017-12-21 09:51

    post请求会自动处理乱码问题,不需要你再进行编码处理.如果加了编码处理代码则会报错

    点赞 评论 复制链接分享

相关推荐