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");

 

 

posted on 2022-02-11 18:17  金满仓  阅读(54)  评论(0)    收藏  举报

导航