1. 云栖社区>
  2. >
  3. 正文

java中编码问题导致ajax提交中文乱码

作者:用户 来源:互联网 时间:2016-10-27 19:03:12

编译浏览器编码

java中编码问题导致ajax提交中文乱码 - 摘要: 本文讲的是java中编码问题导致ajax提交中文乱码, ajax碰到过两问题,一个是时间问题,一个是中文乱码问题。 因为项目都是在谷歌浏览器做的。 所以一直没有发现别的浏览器问题, 测试的时候才发现ie,360 等出现点击ajax所在的方法失效 刚开始一直以为是js不兼容。 调试下发现

ajax碰到过两问题,一个是时间问题,一个是中文乱码问题。
因为项目都是在谷歌浏览器做的。
所以一直没有发现别的浏览器问题,
测试的时候才发现ie,360 等出现点击ajax所在的方法失效
刚开始一直以为是js不兼容。
调试下发现是前台传值发现乱码,
坑。。
然后 把中文先转码
最后后台再解码
就可以了。。
下面是决解方法
前台
 
url: "/yq1012/Ajax.php?name="+encodeURI(encodeURI(name))

后台
 
name= java.net.URLDecoder.decode(name,"UTF-8");

补充:

1.UrlEncode:将字符串以URL编码,所有的中文参数都会在传输过程中转化为url编码

2.iso-8859-1:是JAVA网络传输使用的标准 字符集    tomcat默认接收的编码级.

3.pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。

4.contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。

5.页面文件编码与pageEncoding相同,否则会在jsp页面编译成servlet的时候出现乱码,进而导致响应的页面出现乱码

6.
iso-8859-1是JAVA网络传输使用的标准 字符集,而gb2312是标准中文字符集,一般是操作系统使用的文
字编码方式。
因此,当字符在网络中传递时,不管对于这个字符是怎么编码的,java都认为它是iso8859编码,因此按
照iso8859到unicode的转换规则,变成java保存字符的unicode编码,此时如果直接显示该字符时,将出
现乱码,因为它本身并不是iso8859的编码,而是GBK方式,对应unicode码自然也不正确,所以这时需要
做的是先将这个字符码可逆的转化为原先的编码值即GBK值,(转化方法就是通过getBytes(ISO-8859-1)
得到),然后java才将此GBk值的字符,以gbk到unicode的转化规则保存为java默认方式unicode码。

7.
那么我们可以得到一个编码转换的过程
假设:GBK码("你")->URLencode后变成->(?/)->Tomcat自动替你转一次ISO-8859-1->得到( 23 43 68
23 42 68 每一个符号表示为ISO-8859-1中的一个编码)->接收页面--->再转一次为ISO-8859-1的Byte数
组[23,43,68,23,42,68]--->用GBK再转为可读的文字--->(?/"---->转为("你")

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索编译 , 浏览器 编码 ajax提交中文乱码、ajax提交乱码、ajax提交form表单乱码、ajax提交乱码问题、ajax提交数据乱码,以便于您获取更多的相关知识。