我的 JAVA 代码 list 转换成 Json格式输出后 中文变成了???????

ITBenson 发布于 2015/01/05 22:16
阅读 8K+
收藏 1

@RequestMapping(value = "/list.do")//这块是访问地址
 @ResponseBody
 public void selectUserByCondition(HttpServletRequest request, HttpServletResponse response,
          Quanzi quanzi,
          Model model) {

  Map<String, Object> map = new HashMap<String, Object>();

  @SuppressWarnings("unchecked")
  List<Quanzi> uList = quanziService.selectQuanziByCondition(map);
  JSONArray jsonList3 = JSONArray.fromObject(uList);
  System.out.println(jsonList3.toString());//json格式的数据
  model.addAttribute("uList", uList);
  try {
   response.getWriter().print(jsonList3.toString());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

 

 

输出后网页中文显示的是

 

加载中
0
飞炀
飞炀

如果用了@ResponseBody,就不要用 response.getWriter().print()的方式了。

如果使用ResponseBody的方式,在spring的配置里面增加下面一个bean,直接返回对象就会自动返回json数据了。不过需要引入jackson-mapper-asl需要的jar包。

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />



 
 如果使用response.getWriter().print()的方式,需要在response里面设置文字编码格式。
response.setCharacterEncoding("utf-8");



并设置页面格式为JSON,否则jquery之类的脚本是无法识别成json的。
response.setContentType("application/json");

薄暮凉年
薄暮凉年
正解!^_^
0
hello123
hello123
response.setCharacterEncoding("UTF-8")
0
JacarriChan
JacarriChan

配置上“ContentNegotiatingViewResolver”,下面代码都不需要.

System.out.println(jsonList3.toString());//json格式的数据
  try {
   response.getWriter().print(jsonList3.toString());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }



http://my.oschina.net/u/724985/blog/101963

0
甘薯
甘薯

其实这个和response的编码没关系吧.和jquery也没关系, 客户端收到的东西就不对, 如果是reponse的编码不对客户端看到的应该是乱码而不是???, jquery是在收到东西之后了, 就算返回的不直接指明json格式, 也能得到json字符串的.

感觉在json转换的时候就出问题了.可能这个json转换对汉字支持并不友好.

我觉得你在转换之前应该先把list中object 的汉字进行url转码, 或者你果断换一个json工具吧...

飞炀
飞炀
嘛,汉字显示成问号是iso编码的问题,不管什么编码的汉字,在iso编码里面通通显示成问号。
0
ITBenson
ITBenson

解决了,就是在 response.getWriter().print(jsonList3.toString());

上边加了一个response.setCharacterEncoding("UTF-8"),

谢谢大家了

返回顶部
顶部