在servlet 中 Requset编码问题和responsed处理乱码的问题
Requset编码问题
Post接受方式出现乱码问题:
- 出现的问题:Post是请求体,接受到用户的信息先存放在缓冲区中,而缓冲区的编码是iso-8829-1,和接受到到用户信息不是一样的字符集,所以会出现编码问题
-解决方法:为缓冲区设置编码和用户提交的一样
request.setCharacterEncoding("UTf-8");//设置缓冲区的编码
String string = request.getParameter("name");
Get接受方式出现乱码问题:
Get在得到用户信息时会在url后面,其实已经经历过一次编码
1:解决方法:get所得到用户的信息以ISO-8859-1的编码存入到缓冲区中,然后以utf-8解码;
name = request.getParameter("name");
String string = new String(name.getBytes("ISO-8859-1"),"UTF-8");
//String的方法
responsed对象:
//字符流输出中文方式
response.getWriter().println("中国");
-
一定会出现乱码,字符流有缓冲区,而默认的缓冲区编为:ISO-8859-1,这个字符集不支持中文
-
解决方法:设置response获得缓冲区时的编码和浏览器默认的编码保持一致
方法一
//设置浏览器默认打开时的编码
response.setHeader("Content-type","text/html;charset=UTF-8");
//设置response缓冲区的编码
response.setCharacterEncoding("UTF-8");
response.getWriter().println("中国");
方法二
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("中国");
response.setStatus(404);//设置响应状态
response.setStatus(302);//设置重定向
response.setHeader("Location", "/web_test/Test08");
response.sendRedirect("/web_test/Test08");//替换重定向两句写法
跳转:
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("5秒后跳转");
response.setHeader("Refresh", "5;url=/web_test/Test08");
Response编码问题:
//字节流输出中文的方式
ServletOutputStream stream = response.getOutputStream();
stream.write("中文".getBytes());
1:不一定会有乱码现象,如果打开的浏览器和转为直接数组的编码一样,就不会产生乱码问题
2:解决方法:编码和直接的编码一样一样就行
ServletOutputStream stream = response.getOutputStream();
//设置浏览器打开始默认的字符集
response.setHeader("Content-type","text/html;charset=UTF-8");
stream.write("中文".getBytes());