response对象:
向页面输出中文(乱码问题)
通常获得输出流的方法有两种:
response.getOutputStream()
response.getWriter()
那么处理中文乱码的情况分字节和字符:
解决办法:
字节:ServletOutputStream getOutputStream() 字节输出流
设置浏览器打开文件时所采用的编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
获取字符串byte数组时编码和打开文件时编码一致。
"中文字符".getBytes("UTF-8")字符:PrintWriter getWriter() 字符输出流
response缓冲区的编码,默认值ISO-8859-1
设置response缓冲编码也就是中文字符的编码方式response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "text/html;charset=UTF-8");
response.setContentType("text/html;charset=UTF-8");
总结:response对象输出中文,产生乱码。
字节流:
设置浏览器打开文件时采用的编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
获取字符串的byte数组采用的编码
"中文字符".getBytes("UTF-8")
字符流:
设置浏览器打开文件时采用的编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
设置response缓冲区的编码
response.setCharacterEncoding("UTF-8");
简写的方式(等于上面的两句)
response.setContentType("text/html;charset=UTF-8");
request 对象:
同样request对象分为请求方式的不同,分为常用的post请求,和get请求。
解决办法:
POST请求乱码 只需要设置request对象的缓冲区
request.setCharacterEncoding("utf-8");
GET请求乱码
本文基于tomcat服务器的设置。服务器的默认编码方式ISO8859-1,所以我们默认
解决方案一:修改tomcat/conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"redirectPort="8443" URIEncoding="utf-8"/>
必须有修改tomcat服务器配置文件权限
解决方案二:逆向编解码
username = URLEncoder.encode(username, "ISO8859-1");
username = URLDecoder.decode(username, "utf-8");
解决方案三:简写的方式(推荐使用)
username = new String(username.getBytes("ISO-8859-1"),"utf-8");
request获取中文数据乱码(总结:)
post提交
设置request缓冲区的编码request.setCharacterEncoding("utf-8");
get提交
String构造方法
username = new String(username.getBytes("ISO-8859-1"),"utf-8");