get post pageEncoding charset

<%@ page language="java" import="java.util.*" pageEncoding="GBK" contentType="text/html; charset=GB2312"%>
pageEncoding :设置.jsp文件保存时的编码,
charset:设置页面显示时的编码(浏览器->查看->编码)
pageEncoding,charset如果不设置默认都是“ISO-8859-1”,设置其中任何一个 另一个和它相同
正常应该都设置成一样,如果设置成不一样,以各自自己的为标准。
例如:
1如果pageEncoding设置成“ISO-8859-1” 你在jsp页面上定义一个中文字符,那么eclipse是不能保存成功的,ISO-8859-1不支持中文。
2request.getParameter 得到一个GBK的中文字符,现在out.print 到页面上 ,如果设置charset=GBK 是没有问题的 但是如果设置成ISO-8859-1 就会乱码。
一个http请求的url地址中如果含有非ASCⅡ码的符号,浏览器就会对其进行URL转码操作。
两个java类可以实现java.net包下:
URLEncoder.encode(“字符”, "GBK");//编码
URLDecoder.decode(“%1A%4B”, "UTF-8"); //解码
而浏览器会已charset指定的编码进行编码然后发送给服务器(response.setCharacterEncoding(""),优先charset)
get请求:
http://localhost/test.jsp?a=中国壆
1.“中国壆”会按照charset设置的方式进行url转码(除非页面上设置response.setCharacterEncoding("") response.setCharacterEncoding的作用其实和charset一样,但是他的优先级高于charset)
2.tomcat服务器为例,会对url进行解码默认以ISO-8859-1进行解码。
可以自己设置tomcat的解码方式 URIEncoding="UTF-8"
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
request.getParameter得到的参数就是经过tomcat解码后的数据(如果传递前采用一种编码,tomcat解码采用另外一种就会出现乱码)
当然通过request得到的乱码 有些可以通过new String("".getByte(),"")转化过来,但有些转化是不可逆的。所以要避免前后不一致的情况。
post请求:
1 对于post请求body体中带的参数同样是采用charset的编码方式进行编码传递到后台(同样response.setCharacterEncoding的作用优先于charset)。
2 post方式的解码不是通过tomcat配置的 而是通过request.setCharacterEncoding("")来确定的,如果不指定默认用ISO-8859-1进行转化。如果要用post方式传递中文,而不指定 request.setCharacterEncoding("") 那么request得到的一定是乱码(不知道还有没有其他方式设置);

综上:
解决乱码的简单方法就是页面上pageEncoding,charset,以及tomcat的URLEncoding都用同一种编码。最好是UTF-8。
同时定义一个filter拦截request请求。在filter中设置request.setCharacterEncoding response.setCharacterEncoding都一样就OK了

注:以上仅是个人经验总结 如有错误望指正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值