欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

解决Ajax加载JSon数据中文乱码问题

程序员文章站 2022-06-17 23:02:32
一、问题描述 使用ztree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了springmvc,已经对中文乱码处理,为什么还会出现呢? 此处为的异步请求的配置:...

一、问题描述

使用ztree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了springmvc,已经对中文乱码处理,为什么还会出现呢?

此处为的异步请求的配置:

java代码 

async: { 
  enable: true, 
  url: basepath + '/sysmenu/listsysmenu', 
  autoparam: ["id=parentid"] 
} 

springmvc中文字符处理:

java代码 

<mvc:annotation-driven> 
  <mvc:message-converters> 
  <bean class="org.springframework.http.converter.stringhttpmessageconverter"> 
    <property name="supportedmediatypes"> 
       <list> 
          <value>application/json;charset=utf-8</value> 
      <value>text/html;charset=utf-8</value> 
     </list> 
    </property> 
  </bean> 
 </mvc:message-converters> 
</mvc:annotation-driven> 

返回的结果有中文乱码:

js代码 

[ 
  { 
    "menuid": "880095098165986816", 
    "menuname": "????", 
    "parentid": "880095098165986815", 
    "menuurl": "http://localhost:8080/imovie-manage/sysmenu/listsysmenuui", 
    "menuicon": "", 
    "menusort": 1, 
    "isenable": 1, 
    "parentmenuname": "??", 
    "id": "880095098165986816", 
    "name": "????", 
    "pid": "880095098165986815" 
  }, 
  { 
    "menuid": "880095098165986817", 
    "menuname": "???????", 
    "parentid": "880095098165986815", 
    "menuurl": "http://localhost:8080/imovie-manage/sysmenu/treesysmenuui", 
    "menuicon": "", 
    "menusort": 1, 
    "isenable": 1, 
    "parentmenuname": "??", 
    "id": "880095098165986817", 
    "name": "???????", 
    "pid": "880095098165986815" 
  } 
] 

二、解决方案

经过排查,发现是springmvc中文字符处理的supportedmediatypes少了一种类型。

从浏览器发送的请求来看:

异步刷新使用的是post请求,但从服务器返回的时候,content-type为:text/plain;charset=iso-8859-1

charset是iso-8859-1,而不是utf-8,而springmvc处理的中文乱码没有包含这种类型,所以导致中文乱码。

所以最后的解决方法是在springmvc中文处理加上text/plain这个类型,如下:

java代码

<value>text/plain;charset=utf-8</value> 

 具体如下:

java代码

<property name="supportedmediatypes"> 
  <list> 
    <value>application/json;charset=utf-8</value> 
  <value>text/html;charset=utf-8</value> 
  <value>text/plain;charset=utf-8</value> 
  </list> 
</property> 

总结

以上所述是小编给大家介绍的解决ajax加载json数据中文乱码问题,希望对大家有所帮助