当我和小K使用ajax来request(get), 请求的时候, 中文碰到乱码问题. 无论是否将请求的参数urlencode(gb2312)或者escape, encode是乱码, escape是null…… 而这一切在php里并不发生.
于是换了N种姿势, 就在认定我们2个有人品问题的时候发现, 貌似getQueryString没有问题, 猛然想起getParameter的时候是编码过的. 尝试给prototype加header未果, 貌似是因为xmlhttp本身机制问题, 因为xmlhttp本身即以uft-8来request的, 更大的问题在于我的servlet又是gb的. 实在想不到其他办法, 最后只能以正则来匹配QueryString来获得参数了事.
如果这些文字有幸得以被了解问题原因的朋友看到, 还望不吝赐教. 多谢多谢.
[补1]
在和freeman的讨论中发现, 原来escape出来的是%u6211%u662F%u732A, 也就是是unicode, 而urlencode的格式是%hex%hex, 所以有问题. 更要命的事情是escape还和浏览器选择的encode有关! 如果选iso, 则出来的是正确的%h%h的格式, utf-8和gb2312的时候都是unicode的方式. 参考rfc1738
[补2]
Tomcat之类的servlet container的实现里, 都会在getParameter进行解码, 所以类似%u6211%u662F%u732A, 这样的就不能获得了.
[补3, 解决方法]
1. 按照之前我说的那种分析querystring的方法.
2. js的escape以后将%替换成\即%u6211%u662F%u732A, 替换成\u6211\u662F\u732A, 这样能取得.
3. 用js的uft-8的urlencode, 然后http get. urlencode的js可参考这里. (freeman发给我的, 不知出处).
ajaxservletencoding