论坛首页 Web前端技术论坛

Ajax中文乱码问题解决方案

浏览 7851 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-02  
      中文乱码问题一直是困扰中国程序员的一大难题,但归根结底,问题的实质都是一样的。有些时候会莫名其妙地出现乱码问题,而有些时候乱码问题又莫名其妙地解决了!连自己都不知道是为什么!

  昨天鼓捣一晚上也没有把Ajax请求中的中文乱码问题解决,可今天早上随便乱改,问题居然解决了???我的天啊,真的不知道为什么!而且这种解决方案是我认为不可行的!大哭 

  我在网上找遍了解决乱码问题资料,可没有一个能行的通,无奈只好自己研究赞!其实解决的方法很简单,具体如下:

 

  将客户端文件的编码设置为GB2312,如下面代码所示:

Html代码
  1. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  

  在发送的URL地址中的查询字符串或者是使用POST方式发送的请求内容不要使用escape函数进行编码,切记!

  在服务器端的jsp文件也设置为gb2312编码格式,如下面代码所示:  

jsp 代码
  1. <!---->  

或者设置response的头,如下面代码所示:

java 代码
  1. response.setHeader("Content-Type","text/html; charset=gb2312");  

两者原理是一样的。

  最着关键的是在获取参数时应该对获取字符串进行重新编码,如下面代码所示:

  

java 代码
  1. String username = new String(request.getParameter("username").getBytes("ISO8859_1"),"GB2312");   

其中,username为接收的参数。

直接使用out.print(username);就可以将中文返回给客户端,在客户端直接使用xmlHttp.responseText属性就可以直接使用返回的中文了!谄笑

  附件中我测试用的一个小例子,在tomcat6.0和resin2.1.8中通过测试!

   其实,还有一个一劳永逸的解决方案,就是添加一个过滤器。

  • checkUsername.rar (8.5 KB)
  • 描述: 一个测试中文的小例子!
  • 下载次数: 163
   发表时间:2007-12-02  
标准做法是unicode,编码一般可以utf-8,在某些不支持unicode的环境中做特殊处理,这种场景很少,所以那样成本要小很多
0 请登录后投票
   发表时间:2007-12-03  
还有一种方法,就是提交前用javascript把中文值进行BASE64编码一下,服务器程序取到该BASE64编码后的值,再还原一下,中文就OK了。

但这种方法可能比笨拙,不过也是一种方法。呵呵。
0 请登录后投票
   发表时间:2007-12-13  

补充一下提交方法为GET时时在服务器里写的时这句代码
String username = new String(request.getParameter("username").getBytes("ISO8859_1"),"GB2312");   
为POST时应该时这样吧
String username = new String(request.getParameter("username").getBytes("ISO8859_1"),"utf-8");  
0 请登录后投票
   发表时间:2007-12-14  
JSP的自己写个类转换一下就行了~~我一直这样用~~如果不懂得可以加我QQ:836199366
0 请登录后投票
   发表时间:2007-12-16  
呵呵,弄个过滤器就好了!过滤编码!
再加上escape就好了
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics