前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Servlet 接收前端 Json 数据的中文编码问题

Servlet 接收前端 Json 数据的中文编码问题

作者头像
MashiroT
发布2022-10-28 08:46:41
8950
发布2022-10-28 08:46:41
举报
文章被收录于专栏:MashiroのBlog

引入

在学习Servlet的过程中遇到的问题,使用axios向后台post数据,默认使用的是json格式,默认编码为utf-8,而后台使用输入流接收之后再进行编码转换 new String(DeserializeJsonUtils.deserializeJson(req).getBytes(), StandardCharsets.UTF_8); 是有问题的,体现在单个中文字符转换后可能会变成 ?? ,在网上搜索了两天无果,结果在复习输入流的时候想起Java提供了构造方法设置输入流的编码格式,终于解决了问题。

解决:

错误示例:
代码语言:javascript
复制
public static String deserializeJson(HttpServletRequest req) throws IOException {
    // 这里使用了默认编码
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(req.getInputStream());
        String len;
        StringBuilder sb = new StringBuilder();
        while ((len = bufferedReader.readLine()) != null) {
            sb.append(len);
        }
        return sb.toString();
    }
    // 在这里进行编码转换
    String reqName = new String(DeserializeJsonUtils.deserializeJson(req).getBytes(), StandardCharsets.UTF_8);
正确解法:
代码语言:javascript
复制
public static String deserializeJson(HttpServletRequest req) throws IOException {
    // 更改为utf-8编码
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(req.getInputStream(), StandardCharsets.UTF_8));
        String len;
        StringBuilder sb = new StringBuilder();
        while ((len = bufferedReader.readLine()) != null) {
            sb.append(len);
        }
        return sb.toString();
    }
    // 在这里直接获取,免去转换
    String reqName = DeserializeJsonUtils.deserializeJson(req);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022 年 09 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引入
  • 解决:
    • 错误示例:
      • 正确解法:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档