引入
在学习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);