Spring Boot国际化遇ISO-8859-1字符集不支持印度语言返回???问题求助
问题解决方法
1. 显式配置MessageSource编码
Spring Boot默认读取.properties文件使用ISO-8859-1编码,该编码仅支持拉丁字符,所以意大利语、德语可以正常返回,马拉雅拉姆语、泰米尔语、印地语这类非拉丁字符会被转成问号,直接在application.properties中添加如下配置即可:
# 指定消息资源文件编码为UTF-8 spring.messages.encoding=UTF-8 # 全局请求响应编码强制使用UTF-8 server.servlet.encoding.force=true server.servlet.encoding.charset=UTF-8 server.servlet.encoding.enabled=true
2. 确保资源文件本身存储编码为UTF-8
需要确认你本地的messages_xx.properties文件本身就是以UTF-8编码保存的,避免文件存储阶段就出现乱码:
- 如果你使用IDEA开发,打开
Settings→File Encodings,将Default encoding for properties files设置为UTF-8,同时勾选Transparent native-to-ascii conversion选项。
3. 配置字符串消息转换器编码
@ResponseBody返回字符串时,Spring MVC默认的字符串转换器可能没有指定UTF-8编码,在你的启动类中添加如下配置即可(启动类已经实现了WebMvcConfigurer接口):
@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8); converters.add(0, converter); }
4. 接口兜底配置
如果以上全局配置不生效,也可以直接在接口注解中指定返回内容的编码:
@GetMapping(value = "/test", produces = "text/plain;charset=UTF-8") @ResponseBody public String test() { return messages.get("hello"); }
内容的提问来源于stack exchange,提问作者happy_coding
相关产品推荐
相关产品推荐

