Servlet解决乱码问题

1.解决post和get提交时的乱码问题

     1.1  setCharacterEncoding()方法:

         该方法设置了请求正文中的字符编码,但只能解决post提交时的乱码问题,无法解决get提交时的中文乱码。

request.setCharacterEncoding("utf-8");

   1.2编码再解码:

       该方法post和get通用(建议只是get时使用),tomcat9之后的版本不存在get提交时的乱码问题。

//接收的 name,字符编码为ISO8859-1
String name1=request.getParameter("name"); 

//打散:将name1字符串按照原编码进行打散
byte[] bytes = name1.getBytes("ISO8859-1");
//组装:将bytes字节数组按照指定字符编码进行组装,组装为String
name1 = new String(bytes,"UTF-8");

//打散组装一般这样写
name1 = new String(name1.getBytes("ISO8859-1"),"UTF-8");

2.response返回时的乱码问题

      setContentType()方法:该方法必须在printWrite()之前设置。

response.setContentType("text/html;charset=UTF-8");
//专门用于修改或指明setContentType()方法的MIME的响应体字符编码方式
//response.setCharacterEncoding("utf-8");

3.重定向的乱码问题

//请求的Servlet中
//编码:打散
name = URLEncoder.encode(name,"UTF-8");
response.sendRedirect("register2?pname="+name);  //重定向

//重定向的Servlet中
String pname = request.getParameter("pname");
//解码:组装
pname=URLEncoder.encode(pname,"UTF-8");
pname=new String(pname.getBytes("ISO8859-1"),"UTF-8");

请求转发:
 request.getRequestDispatcher("index.jsp").forward(request, response);

重定向:response.sendRedirect("register2?pname="+name);

猜你喜欢

转载自blog.csdn.net/wangyang668/article/details/81748377