Loading... ### 引入 在学习Servlet的过程中遇到的问题,使用axios向后台post数据,默认使用的是json格式,默认编码为utf-8,而后台使用输入流接收之后再进行编码转换 `new String(DeserializeJsonUtils.deserializeJson(req).getBytes(), StandardCharsets.UTF_8);` 是有问题的,体现在单个中文字符转换后可能会变成 `??` ,在网上搜索了两天无果,结果在复习输入流的时候想起Java提供了构造方法设置输入流的编码格式,终于解决了问题。 ### 解决: #### 错误示例: ```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); ``` #### 正确解法: ```java 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 月 20 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 本作品采用 CC BY-NC-SA 4.0 International License 进行许可。