GET&POST请求和响应的中文乱码解决方案
Serlvet程序的请求和响应乱码问题
get请求与post请求数据乱码
public class RequestAPIServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求参数
String username = req.getParameter("username");
//解决get请求的中文乱码
//1 先以 iso8859-1 进行编码
//2 再以 utf-8 进行解码
//username = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
System.out.println(username);
var pwd = req.getParameter("pwd");
System.out.println(pwd);
System.out.println("请求方式:" + req.getMethod());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求体的字符集为UTF-8,解决POST请求中文乱码
//字符集设置要在获取请求参数前
req.setCharacterEncoding("UTF-8");
var username = req.getParameter("username");
/*byte[] bytes = username.getBytes("ISO-8857-1");
var data = new String(bytes, StandardCharsets.UTF_8);
System.out.println(data);*/
System.out.println(username);
var pwd = req.getParameter("pwd");
System.out.println(pwd);
System.out.println("请求方式:" + req.getMethod());
}
}
服务器响应客户端数据乱码问题
public class MyHttpServletResponse extends HttpServlet {
//获取字符流响应数据
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决响应数据中文乱码
//设置浏览器与服务器都使用utf-8字符集,并设置了响应头
//此方法要在获取流对象之前使用
resp.setContentType("text/html;charset=UTF-8");
//获取字符流对象
var writer = resp.getWriter();
//服务端向客户端响应数据
writer.write("Hello,Browser,我是服务端!");
}
}
说明:解决中文乱码必须放到获取流之前
推荐使用
// 它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头
// 此方法一定要在获取流对象之前调用才有效
resp.setContentType("text/html;charset=UTF-8");
不推荐使用
// 设置服务器字符集为 UTF-8
resp.setCharacterEncoding("UTF-8");
// 通过响应头,设置浏览器也使用 UTF-8 字符集
resp.setHeader("Content-Type", "text/html; charset=UTF-8");
SpringMVC请求和响应的乱码问题
如果使用的是Tomcat服务器,可以在server.xml
配置字符集解决get请求的乱码
post请求乱码可以在web.xml
配置字符编码过滤器
<!--配置字符编码过滤器-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--设置请求参数字符集初始化-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!--设置请求与响应字符集编码初始化-->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>