最近刚好项目上遇到了中文乱码问题,也刚好记录一下
检查编译环境的编码:
File --> Setttings --> Editor --> File Encodings,这下边设置三个地方的编码格式
配置JDK全局编码:
如图在系统环境变量中增加一个变量:JAVA_TOOL_OPTIONS 值为 -Dfile.encoding=UTF-8,如果是项目发布,就在启动的时候加入该JVM 参数
设置maven打包插件的编码
<plugin>
<!--打包成可执行jar-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
在application.properties文件中加入下面内容
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
但是貌似有时候不起作用,因为application.properties 在IDEA中好像有BUG,最好是转为yml文件来设置
如果连接有数据库,注意看数据库里面的编码集以及看看数据快照是否已经是乱码了,而不是应用导致的
以上就是正常来说基本就可以搞定了,如果还有乱码可以继续尝试下面的方式
修改controller的@RequestMapping
produces="text/plain;charset=UTF-8"
在配置类中增加如下代码:
@Configuration
public class CustomMVCConfiguration extends WebMvcConfigurerAdapter {
@Bean
public HttpMessageConverter<String> responseBodyConverter() {
StringHttpMessageConverter converter = new StringHttpMessageConverter(
Charset.forName("UTF-8"));
return converter;
}
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
converters.add(responseBodyConverter());
}
@Override
public void configureContentNegotiation(
ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
}
}