JS中默认编码导致URL重写时中文参数乱码

来源:互联网 发布:iso9001 软件开发 编辑:程序博客网 时间:2024/06/15 03:33

问题场景:触发GIS绑定的单击事件时,通过window对象提交url,附带“省份”,在页面加载完成时参数出现乱码,但地址栏中的参数正常?

问题解决:

网络版本之一:通过IDE修改外联的JS编码格式

我的版本:

        由于我的JS量小,直接追在页面最下边了(懒得单独写js),所以另寻方法,经过测试,这种通过window提交的URL类似于内存中“字符到字节到字符”的情况,

所以决定在目标页面通过String自带的转码方法,重新编码后可行(js默认的编码格式ISO-8859-1),所以“String s=new String(params.getBytes("ISO-8859-1"),"UTF-8");”即可解决目标页面的接受中文参数乱码的问题。


注:通过查阅,这种方式虽然可以获取正确字符串,但是不被推荐,这种方法的编码解码大致原理是,中文字符按照ISO8859-1输出,一个汉字被拆成了两个欧洲字符,然后又从新拼接成了正确的汉字,增加了一次编码解码的开销,这种乱码原因主要是应用服务器的配置造成的,造成第一次解析按照ISO8859-1;

常见的解决方法是在tomcat的server.xml下的connetor属性中增加URIEncoding或者useBodyEncodingForURI属性。


引出场景:window对象提交URL的参数长度受限,而且由于我使用了iframe,目标JSP直接获取部分参数,网络版本解释是iframe和JSP的结合不被祝福,这下有点懵了?

问题解决:

网络版本之一:通过js为iframe动态增加表单,该变态设置n个隐藏域,这里放参数,然后通过submit提交,这个方法据说可用,不过没试。

我的版本:

        不过目前我采用了一个方法,还是可行的,就是源页面中通过js将查询参数拼接成json字符串,目标页面通过第三方Jar和java来解析json字符串(也可以用js解析),不过我这里统一用了jsp表达式,这时页面就可以正常获取到url参数。




0 0