`
Mysun
  • 浏览: 270396 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JQuery JSON异步请求中文乱码问题

阅读更多
  最近在用Jquery的getJSON方法进行AJAX异步调用的时候,碰到了在中文乱码问题。在我的代码中需要传中文到后台的Webwork Action里面,然后返回值里面也包含中文。请求和相应的参数都是通过JSON传送。
  需要说明一点,jQuery的getJSON方法其实是把JSON格式的参数转换成URL上面的参数,然后发起请求。返回的时候才以真正的json格式数据返回。
  我的页面和Action的编码都是utf-8。碰到的问题是页面传送到Action的中文能够正常显示,但是Action通过JSON格式返回中文却显示乱码。网上找了很多相关资料,但是都没有解决问题。因为我的Webwork JSONResult Type是自己写的,所以我觉得问题可能处在那里。
  最后想到的办法是在Action里面使用java.net.URLEncoder把中文转码一下,变成%EA%BC....这种格式,然后通过JSON传到页面上。
try {
  temp.setContent(java.net.URLEncoder.encode("你好啊", "utf-8"));
} catch (UnsupportedEncodingException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}


  然后在页面的getJSON回调函数里面用javascript的decodeURI把之前经过转码的字符串转回到中文。
decodeURI(msgs["content"])

  这样就能正常显示中文了。有一点需要注意,就是编码跟解码时候的字符集一定要一样,否则转换会出错。因为GB2312和UTF-8还有其他可以表示中文的字符集在用java.net.URLEncoder转码之后的结果是不一样的。所以编码和解码使用的字符集要对应才行。
分享到:
评论
4 楼 ksgimi 2011-07-14  
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
3 楼 Soimissu_plum 2011-01-01  
flyingpig4 写道
我也是这样解决的。
但是我有个问题:
比如我是list,传的都是从数据库里面读取的值;
但我岂不是要一一判断是否为中文字符再转换呢?
有没有办法进行统一设置,就像过滤器一样。?

我的也是难道需要一一去转换麽?
2 楼 flyingpig4 2010-03-06  
我的邮箱是:flyallen5@gmail.com
希望楼主指导一下。谢谢
1 楼 flyingpig4 2010-03-06  
我也是这样解决的。
但是我有个问题:
比如我是list,传的都是从数据库里面读取的值;
但我岂不是要一一判断是否为中文字符再转换呢?
有没有办法进行统一设置,就像过滤器一样。?

相关推荐

Global site tag (gtag.js) - Google Analytics