java云服务开发常见问题之spring中文字符串乱码

举报
精灵小小小 发表于 2020/11/27 09:59:21 2020/11/27
【摘要】 问题说明:spring3.0以上版本,若是直接返回字符串(json),所有中文均会变为???问题解析:中文字符串乱码是spring3.0以上版本的通用现象,是由于spring mvc默认字符串处理器字符集为ISO_8859_1引起的。如上图所示,spring源码中,mvc注册时,首先加载消息处理器然后如果没有用户自定义的消息处理器,则加载默认消息处理器而默认消息处理器中,字符串处理器 str...

问题说明:

spring3.0以上版本,若是直接返回字符串(json),所有中文均会变为???

问题解析:

中文字符串乱码是spring3.0以上版本的通用现象,是由于spring mvc默认字符串处理器字符集为ISO_8859_1引起的。

如上图所示,spring源码中,mvc注册时,首先加载消息处理器
然后如果没有用户自定义的消息处理器,则加载默认消息处理器
而默认消息处理器中,字符串处理器 stringHttpMessageConverter 默认字符集是ISO_8859_1,因此导致UTF-8的中文均显示为???,如下所示

解决方案:

所以若是希望全局性地解决 spring3.x之后的中文乱码问题,方案有以下几种:
1.
自定义全套消息处理器
2.
修改消息处理器 stringHttpMessageConverter 的默认字符集 (不能新增)

方案2实现:

使用@EnableWebMvc注解

(https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/EnableWebMvc.html)

继承WebMvcConfigurer接口,并覆盖extendMessageConverters

把消息处理器 stringHttpMessageConverter 的默认字符集改为UTF-8

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。