在jsp与servlet中处理中文乱码问题

1.向页面输出中文(分为字节流和字符流)response

字节流:代码中中文的编码和浏览器的编码需要一致
解决乱码:
  * 设置浏览器默认打开时候的编码集
  * 获得字节数组的时候,传入一个编码集
*** 将两个编码一致即可
// 设置浏览器默认打开的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
// 字节数组的时候设置编码,默认是gbk
response.getOutputStream().write("中文".getBytes("utf-8"));


字符流:
解决乱码:
* 设置浏览器的打开时的字符集
* 设置response缓冲区的编码(默认是ISO-8859-1编码,不支持中文)
// 设置浏览器打开的时候的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
// 设置response缓冲区的编码
response.setCharacterEncoding("utf-8");
response.getWriter().write("中文");

*** 字符流编码简写形式,这一句相当于上面两句 
response.setContentType("text/html;charset=utf-8");

注意事项:字节流和字符流是互斥的,只能用一种


2.处理参数带有中文(分为post和get)request

post:直接通过request接收数据 存到request的缓冲区,默认编码是ISO-8859-1(不支持中文)
  解决:* 设置request的缓冲区的编码

                                request.setCharacterEncoding("utf-8");


  get: 数据需要通过地址栏 URL 编码
3种解决方式:

  * 1.使用URLEncoder编码,URLDecoder解码
  username = URLEncoder.encode(username, "ISO-8859-1");
username = URLDecoder.decode(username, "utf-8");
 
  * 2.修改Tomcat的编码值(不建议,会影响其它项目)
修改server.xml 
<Connector port="80" protocol="HTTP/1.1" 
   connectionTimeout="20000" 
   redirectPort="8443" URIEncoding="utf-8"/>
* 必须有修改tomcat服务器配置文件权限

  * 3.String的构造方法(相当于方法1的简化,建议使用这种方式)
  username = new String(username.getBytes("ISO-8859-1"),"utf-8");


总结:

Response乱码
字节流
// 设置浏览器默认打开的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
// 字节数组的时候设置编码,默认是gbk
response.getOutputStream().write("中文".getBytes("utf-8"));
字符流
解决乱码:
* 设置浏览器的打开时候的字符集和response缓冲区的编码
response.setContentType("text/html;charset=utf-8");
Request乱码
POST
* 设置request的缓冲区的编码
request.setCharacterEncoding("utf-8");
GET
* 3.String的构造方法
username = new String(username.getBytes("ISO-8859-1"),"utf-8");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章