中文乱码问题一直是困扰中国程序员的一大难题,但归根结底,问题的实质都是一样的。有些时候会莫名其妙地出现乱码问题,而有些时候乱码问题又莫名其妙地解决了!连自己都不知道是为什么!
昨天鼓捣一晚上也没有把Ajax请求中的中文乱码问题解决,可今天早上随便乱改,问题居然解决了???我的天啊,真的不知道为什么!而且这种解决方案是我认为不可行的!
我在网上找遍了解决乱码问题资料,可没有一个能行的通,无奈只好自己研究!其实解决的方法很简单,具体如下:
将客户端文件的编码设置为GB2312,如下面代码所示:
Html代码
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
在发送的URL地址中的查询字符串或者是使用POST方式发送的请求内容不要使用escape函数进行编码,切记!
在服务器端的jsp文件也设置为gb2312编码格式,如下面代码所示:
jsp 代码
或者设置response的头,如下面代码所示:
java 代码
- response.setHeader("Content-Type","text/html; charset=gb2312");
两者原理是一样的。
最着关键的是在获取参数时应该对获取字符串进行重新编码,如下面代码所示:
java 代码
- String username = new String(request.getParameter("username").getBytes("ISO8859_1"),"GB2312");
其中,username为接收的参数。
直接使用out.print(username);就可以将中文返回给客户端,在客户端直接使用xmlHttp.responseText属性就可以直接使用返回的中文了!
附件中我测试用的一个小例子,在tomcat6.0和resin2.1.8中通过测试!
其实,还有一个一劳永逸的解决方案,就是添加一个过滤器。