java乱码分析

http请求无非就是get和post请求,分下面四种场景java

一、URL方式直接访问。(get请求)jquery

二、页面连接。(get请求)web

三、表单get提交(get请求)ajax

四、表单post提交(post请求)tomcat

参数传递有两种,一种是经过url传参,一种是经过body传参。服务器

1.表单get提交其实就是将参数拼接到url后面,若是是中文必需要转换为ascii再拼接提交,例如:"我 爱 你" 转换为 "%E6%88%91%20%E7%88%B1%20%E4%BD%A0",也就是用encodeURI函数编码函数

2.post提交表单时,参数经过body传递,传递时根据请求头contentType类型编码处理再提交到服务器。post

3.值得注意的一个坑:用ajax.post提交数据时候中文乱码编码

a)当含有中文的参数拼接在post的url后面会乱码,中文参数必须以js对象放在ajax的data属性上;url

b)当含有中文的参数以序列化的形式放在ajax的data属性上会中文乱码,必须以js对象的形式放在ajax的data属性上(以序列化的形式ajax会把参数拼接到url后面jquery.ajax是这样的)

js编码函数区别

js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应j3个java解码函数:unescape,decodeURI,decodeURIComponent

附带escape,decodeURI,decodeURIComponent之间的区别

escape对0-255之外的unicode值进行编码时输出%u****格式,

其它状况下escape,encodeURI,encodeURIComponent编码结果相同。

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

 

web.xml中配置的过滤器只能针对post 请求的数据进行编码转换,对于get 提交的数据乱码是处理不了的.(get请求编码设置tomcat的server.xml文件)

相关文章
相关标签/搜索