Ajax的Post提交数据程序接受中文乱码解决办法
Ajax以POST方式提交,url形式为”url?param=xx¶m2=xx”时,如果传递的参数是中文或日文,后台接收参数将出现乱码,疑似“灏?浼??ㄨ??rdquo;。此时我们需要将url编码成UTF-8。调用javascript方法encodeURI(URIstring),后台接收参数调用URLDecoder.decode(String s,String enc) 解码。
工作中遇到这个问题,起初打算用反射循环给属性转码,考虑到反射效率问题,为避免滥用反射。于是想到BeanUtils工具包赋值前能不能自定义操作呢?还真行。下面给出工作中遇到的实例,页面通过jQuery序列化所有表单使之成为url参数形式字符串,通过Ajax提交。后台Struts封装的FormBean取得所有参数值,调用BeanUtils工具包copyProperties(Object dest, Object orig)方法将FormBean复制到ValueBean,在复制对象属性之前,自定义String编码转换器,转换器中通过URLDecoder.decode(String s,String enc)对Value进行转码。对象的所有属性将会通过自定义转换器过滤转码成中文。
解决此问题的方法非常简单,只需要在JS处理参数时用escape()函数处理一下即可,而且不需要再用unescape()解码,这个方法适合POST和GET方式,具体的Ajax代码这里我不例出,这里给出用escape()函数处理参数时的代码:
代码如下 | |
var htmer ="getcode="+escape(getcode)+"&Content="+escape(Content); |
通常我们在处理Ajax的时候会在这里直接获取参数的值,为了使中文参数不是乱码,我们只需要用escape()函数对参数处理下即可。
问题二
当网站页面不是utf-8编码时,ajax提交的中文便会变成乱码,解决方法如下:
找到jquery.js里的
代码如下 | |
将它改成 |
就可以了。原因:未指定charset时,jquery使用ISO-8859-1,ISO8859-1,通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。jquery的ajax根本没有考虑到国际化的问题,而使用了欧洲的字符集,所以传递中文时才会出现乱码。
例子
js的ajax
代码如下 | |
if(confirm("确定保存吗?")){ |
后台程序
代码如下 | |
private void formBeanToValueBean(ZmxgzzmsyVB vb, ZmxgzzmsyFB fb) |