springBoot 中文乱码问题分析,即统一utf8编码

101 篇文章 15 订阅

最近在使用sprintBoot,发现中文乱码问题,所以这里记录一下。

乱码问题,很多问题都要从数据库、应用程序、客户端三个部分进行分析。

1、数据库编码设置

配置my.cnf:

--在 [mysqld] 标签下加上三行
default-character-set = utf8
character_set_server = utf8
lower_case_table_names = 1 //表名不区分大小写(此与编码无关)


--在 [mysql] 标签下加上一行
default-character-set = utf8


--在 [mysql.server]标签下加上一行
default-character-set = utf8


--在 [mysqld_safe]标签下加上一行
default-character-set = utf8


--在 [client]标签下加上一行
default-character-set = utf8
 

2、SpringBoot链接数据库编码设置

在application.properties里配置链接编码,如下:

####### db config
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=UTF8&useSSL=true&allowMultiQueries=true&serverTimezone=Asia/Seoul
spring.datasource.username=test_db
spring.datasource.password=test_db.123456
 

3、SpringBoot返回内容编码设置

SpringMVC的@ResponseBody返回中文乱码的原因是SpringMVC默认处理的字符集是ISO-8859-1,在Spring的org.springframework.http.converter.StringHttpMessageConverter类中可以看到如下代码:

public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

但是实际需要的是UTF-8,所以需要转换, 添加produces = "application/json; charset=utf-8" / produces="text/html;charset=UTF-8",如下所示:

@RequestMapping(value = "/select", produces = "application/json; charset=utf-8")
@ResponseBody  
public String getSelectTagByCategory(@RequestParam Map<String,String> data) 
{
        StringBuffer sb = new StringBuffer();
        return sb.toString();
}

第二种:在配置文件中的mvc:annotation-driven中添加如下代码:
<mvc:annotation-driven >
        <!-- 消息转换器 -->
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <mvc:resources location="/resources/" mapping="/resources/**" />

对于乱码问题,这样就可以正常显示中文了.

4、MockMvcRequestBuilders 测试编码设置

String response = mockMvc.perform(MockMvcRequestBuilders.get(url).accept(MediaType.APPLICATION_JSON_UTF8)
        .contentType(MediaType.APPLICATION_JSON))
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andDo(print())
        .andReturn().getResponse().getContentAsString();

但是,MediaType.APPLICATION_JSON_UTF8已经在SpringBoot 2.1.6版本上,显示即将抛弃,但是设置了测试了一下,还是起作用的。

 

5、客户端编码

那就是客户端这边设置utf8编码,不是就进行转码,这里就不再多说了。

 

参考:

https://blog.csdn.net/zknxx/article/details/52423608

https://blog.csdn.net/zsq520520/article/details/68107413

SpringBoot中,中文乱码问题是比较常见的。解决这个问题有多种方法。 一种常见的解决方法是在application.properties或application.yml文件中配置字符编码。可以设置以下属性来解决中文乱码问题: - server.servlet.encoding.charset=utf-8:设置字符编码为UTF-8 - server.servlet.encoding.force=true:强制使用字符编码 - server.servlet.encoding.enabled=true:启用字符编码 另一种常见的解决方法是使用过滤器来处理字符编码SpringBoot默认会配置一个基本的CharacterEncodingFilter来处理字符编码,但为了保险起见,可以自己添加一个过滤器来处理中文乱码问题。 综合以上两种方法,你可以在application.properties或application.yml文件中添加以下配置来解决中文乱码问题: ``` server.servlet.encoding.charset=utf-8 server.servlet.encoding.force=true server.servlet.encoding.enabled=true ``` 这样配置后,SpringBoot会使用UTF-8编码来处理中文字符,解决乱码问题。如果乱码问题仍然存在,可以尝试其他方法,比如检查是否有其他地方覆盖了字符编码的配置,或者可以使用自定义过滤器来处理字符编码。只要保证字符编码一致,中文乱码问题就可以得到解决。 [3<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [解决SpringBoot返回中文乱码问题方法汇总](https://blog.csdn.net/m0_59278919/article/details/127340225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Spring Boot 中文乱码问题解决方法](https://blog.csdn.net/Dyoungwhite/article/details/124584421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值