Java Web中的乱码问题的分析
GET请求的中文乱码问题解决
浏览器发送的字符编码和页面编码保持一致但是Tomcat接收请求的字节数组时,默认使用ISO-8859-1解码。所以如果页面编码不是ISO-8859-1,会有乱码问题。因此Servlet要根据Tomcat解码时用的编码集,拿到客户端发送来的字节数组,再对此字符数组用对的编码集进行解码获取正确的字符串。代码如下:
String value = new String(request.getParameter("key").getBytes("ISO-8859-1"), "UTF-8");
也可以在Tomcat的配置文件 server.xml中指定编码格式为UTF-8:
<Connector connectionTimeout=”20000" port="8080" protocol="HTTP/1.1 redirectPort="8443" URIEncoding="UTF-8"/>
还可以通过前台编码,后台解码的方式。
前端:
var str=encodeURI(encodeURI("这里是要编码的含有中文的字符串"));
两次编码的原因是URI中%是转义字符,第二次编码的目的是将%进行编码。
后端:
String result= URLDecoder.decode(request.getParameter("取到的编码字符串"), "utf-8");
POST请求的中文乱码问题解决
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //务必在获取请求参数之前调用该方法设置请求体字符集 req.setCharacterEncoding("UTF-8"); String username = req.getParameter("username"); System.out.println("用户名:" + username); }
响应的中文乱码问题解决
方案一
// 设置服务器字符集为 UTF-8 response.setCharacterEncoding("UTF-8"); // 通过响应头,设置浏览器也使用 UTF-8 字符集 response.setHeader("Content-Type", "text/html; charset=UTF-8");
方案二
// 它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头 // 此方法一定要在获取流对象之前调用才有效 response.setContentType("text/html; charset=UTF-8");
浙公网安备 33010602011771号