Servlet中两大对象request和response的编码问题总结

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");


java中有设置编码的方法,设置这一个方法之后就可以不用写上面的两句,一句顶两句。
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");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值