老问题,Ajax中文问题解决办法:
首先,页面编码采用gb2312,这是我们一般常用的编码方式,而通过js发送的异步请求则都是采用UTF-8的编码,因此注意js端的encode和服务端的解码。
先看看js的几种编码和解码的方法吧:
encode(),decode();对URI进行编码,但不对‘/’,‘#’,‘+’等字符进行编码;
encodeURIComponent(),decodeURIComponent(),对大部分字符进行编码。(除了哪些忘了,具体见javascript权威指南)。
escape()和unescape()这种编码方式发送请求时会报一个不合法的编码的错误(ie6下面)。
代码如下:
var student = '小明 ++ ## // 测试中文' function code(str){ return encodeURIComponent(str); } function decode_my(str){ return decodeURIComponent(str); } function URI(str){ return encodeURI(str) } function deURI(str){ return decodeURI(str) } function ex(str){ return escape(str) } function deex(str){ return unescape(str) } alert(code(a)); alert(decode_my(a)) alert(URI(a)) alert(deURI(a)) alert(code(ex(a))) alert(decode_my(deex(a)))
有了这个例子,可以很明白的了解这些方法的用途,再配合prototype来写个Ajax:
var url = 'b.jsp' var ajax = new Ajax.Request(url,{ method:'post', parameters:'name='+code(a), onSuccess:function(req){ alert(req); var res = req.responseText; alert(res); document.writeln(res); }, onFailure:function(){ alert(123); } });
发送到后台如何解析呢?
不废话,代码如下:
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
response.getWriter().write(name);
这样就可以得到正确的中文了,在tomcat5.5下测试过。还有很多的问题如:设置respon的header信息等再次不赘 述了。