在springboot中新建了servlet,发现中文乱码,设置了content type发现并没有生效。
PrintWriter out = resp.getWriter();
userName = req.getParameter("userName");
resp.setContentType("text/html;charset=UTF-8");
resp.setCharacterEncoding("utf-8");
检查了所有spring的filter发现并没有改变content type的地方,跟踪源码,发现response中一段
public void setCharacterEncoding(String charset) {
if (isCommitted()) {
return;
}
// Ignore any call from an included servlet
if (included) {
return;
}
// Ignore any call made after the getWriter has been invoked
// The default should be used
if (usingWriter) {
return;
}
getCoyoteResponse().setCharacterEncoding(charset);
isCharacterEncodingSet = true;
}
跟踪发现usingWriter为true。发现默认为flase,在response.getWriter() 会赋值true
故setContentType放置getWriter之前,乱码问题解决。