中文参数乱码问题

本文探讨了在Java项目中使用Ajax请求时遇到的中文参数乱码问题,并提供了两种解决方案:一是对参数值进行两次URLEncode;二是设置请求的编码格式。此外还讨论了在特定插件环境下如何通过设置form表单的accept-charset属性来解决乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    中文参数总是会引起一些乱码问题,烦不胜烦。js默认的UTF-8编码,java项目使用的是gbk编码,使用ajax请求获取到数据然后作为参数请求下一个页面时就会发生乱码

    其实java项目所使用的应用服务器(tomcat、resin等)本身就会根据项目编码格式默认的对参数进行一次加密和解密。

    后来摸索了一下有两个解决方案:

    1)、对请求的参数值进行两次URLEncode()

    原理:第一次进行encode后会将字符串转换为ascii字符编码,这个时候汉字就不是多字节字符编码了,这个时候再对其进行第二次编码,因此,当第一 次解析时不管使用何种解析方式得到的都是第一次编码所得到的asscii字符编码,然后再使用js默认的UTF-8格式解码就可以得到正确的字符了。

    2)、设置请求的编码格式,request.setCharaterEncoding("XXX")

    原理:这样服务器在自动解码时就会按照请求中设置的编码格式进行解码,只要设置解码的格式与编码时一致即可得到正确编码的值。

  


 

2012/10/16

最近又遇到一个乱码问题,汇总到这里

jsp页面,java全部使用的UTF-8编码,后台使用了一个列表工具插件,该插件实现了通过数据库配置一些参数自动生成列表功能。由于页面使用form表单以get方式提交,表单总的中文默认按照页面编码格式进行编码,而该插件接收参数时解码方式使用的是gbk编码(在resin下是gbk而在jetty下又是utf-8了),至于具体什么原因没搞清楚,这时解码方式与页面编码方式不一致了,因此在form表单中加入accept-charset="gbk"属性即可指定请求编码时使用gbk编码。

转载于:https://www.cnblogs.com/gewei/archive/2012/02/07/2341577.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值