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

举报
精灵小小小 发表于 2020/11/27 09:59:21 2020/11/27
8.5k+ 0 1
【摘要】 问题说明: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

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

    全部回复

    上滑加载中

    设置昵称

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

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

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