Spring Boot 配置文件中的中文读取出来是乱码,或者是问号

本文介绍了如何解决Spring框架中出现的中文乱码问题。主要分为两步:一是确保配置文件采用UTF-8编码;二是配置Spring使用UTF-8编码处理HTTP请求。文章提供了两种配置方法,一种是在application.yml中直接配置,另一种是通过实现WebMvcConfigurer接口来配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可能有两个原因导致这个问题,一个是配置文件编码方式不是UTF-8的,另一个是Spring http使用的编码不是UTF-8

1、第一步,将配置文件的编码方式改为UTF-8

xx.propertiesxx.yml文件的编码方式改为UTF-8,中文内容再重新写一遍。

2、第二步,配置Spring的编码方式

这里有两种方式。

2.1、方法一

在配置文件中设置(application.yml

spring:
#--------------------------charset--------------------------
  http:
    encoding:
      charset: UTF-8
      enabled: true
      force: true

#--------------------------Server--------------------------
server:
  tomcat:
    uri-encoding: UTF-8

2.2、方法二

配置过滤器,过滤所有请求,并设置字符编码方式
注意:需要重新配置json转换器

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Bean
    public SecurityInterceptor securityInterceptor() {
        return new SecurityInterceptor(security);
    }

    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        return new MappingJackson2HttpMessageConverter();
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 解决(配置文件属性值)中文乱码问题
        converters.add(responseBodyConverter());
        // 需要重新配置json转换器
        converters.add(mappingJackson2HttpMessageConverter());
    }

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorPathExtension(false);
    }
}

如果方法一无效的话,就再试试方法二吧,哈哈…

### SpringBoot 中文乱码解决方案 在 SpringBoot 项目中,中文乱码问题可能出现在多个场景下,例如文件上传、表单提交、接口返回值等。以下是几种常见的解决方法: #### 1. 配置全局字符编码 可以在 `application.properties` 或 `application.yml` 文件中设置全局字符编码为 UTF-8,以确保所有请求和响应都使用统一的编码格式[^3]。 ```properties # 全局字符编码设置 spring.http.encoding.force=true spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true server.tomcat.uri-encoding=UTF-8 ``` #### 2. 添加依赖解决 Tomcat 编码问题 如果使用的是 Spring Boot 2.x 版本,可以尝试在 `pom.xml` 文件中添加以下依赖来解决 Tomcat 的编码问题[^1]。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>2.5.5</version> </dependency> ``` #### 3. 使用拦截器解决中文乱码 通过自定义拦截器或配置类,可以强制设置请求和响应的字符编码为 UTF-8。以下是一个示例代码[^5]: ```java package com.xz.util; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.nio.charset.Charset; import java.util.List; @Configuration public class CharsetConfig implements WebMvcConfigurer { @Bean public HttpMessageConverter<String> responseBodyConverter() { StringHttpMessageConverter converter = new StringHttpMessageConverter( Charset.forName("UTF-8")); return converter; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(responseBodyConverter()); } } ``` #### 4. 处理国际化资源文件中的乱码 如果在国际化资源文件(如 `.properties` 文件)中遇到中文乱码问题,可以尝试将文件保存为 UTF-8 格式,并在读取时确保编码正确[^2]。此外,Spring Boot 提供了自动加载机制,可以通过以下方式验证: ```java package com.cnstar.test; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest(classes = TestApplication.class) @RunWith(SpringRunner.class) public class CnstarTest { @Value("${name}") private String name; @Test public void test1() { System.out.println("中文内容:" + name); } } ``` #### 5. 解决页面显示乱码 如果页面上显示问号(`?`),可能是由于服务器未正确解析编码导致的。此时可以尝试以下两种方案[^4]: - **方案一**:在前端页面中显式指定字符集为 UTF-8。 ```html <meta charset="UTF-8"> ``` - **方案二**:在后端代码中强制设置响应头的字符集。 ```java response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); ``` --- ### 注意事项 - 如果上述方法仍无法解决问题,建议检查项目的整体编码设置,包括 IDE 的文件编码、数据库连接编码等。 - 确保所有涉及中文处理的地方均使用 UTF-8 编码。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值