引入

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

解决:

错误示例:

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);

正确解法:

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);

ねぇ,あなたは何色になりたい