在使用@ResponseBody 时,返回String字符串,其中有中文。后台返回时还没有乱码,但是在前台jsp页面取值时出现乱码,中文都以 ? 的形式显示。
解决办法:
在spring-mvc.xml中修改如下配置
<mvc:annotation-driven > <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>text/plain;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
在<mvc:annotation-driven ></mvc:annotation-driven >中加入如上配置即可。
原因:在StringHttpMessageConverter中解析文本默认编码是iso-8859-1,源码如下:
public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> { public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1"); private final Charset defaultCharset; private final List<Charset> availableCharsets; private boolean writeAcceptCharset = true; ..... 省略其他
修改了 配置,可将编码设置为utf-8。