request与response的乱码问题的总结及解决方法
一. response的乱码问题:
1,使用 字节流 向页面输出中文:
不一定会出现乱码,因为中文字节数组默认是GBK,如果浏览器打开的默认编码也是GBK,就不会出现乱码,否则会乱码。
解决办法:
需要指定浏览器打开的时候的编码,response.setHeader("Content-Type","text/html;charset=UTF-8");
需要指定中文字节数组采用的编码。
例如:
response.setHeader("Content-Type", "text/html;charset=UTF-8");
OutputStream os = response.getOutputStream();
os.write("中文".getBytes("UTF-8"));
2,使用 字符流 向页面输出中文:
一定会出现乱码,response:对象是由老外设计的 response缓冲区用的是ISO-8859-1编码.
解决方案:
需要将response的缓冲区的编码集修改了. response.setCharacterEncoding("");设置response缓冲区的编码。
需要将浏览器默认打开时候编码进行设置.
例如:
response.setHeader("Content-Type","text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
或者是一句话:
response.setContentType("text/html;charset=UTF-8");(它就相当于上面的两句了)
二. request的乱码问题:
分为post请求和get请求:
1,POST请求乱码 :request.setCharacterEncoding("utf-8");
2,GET请求乱码
解决方案一:修改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("ISO8859-1"),"utf-8");