采用IDEA进行springboot开发时,在application.properties配置的中文乱码
配置文件如下:
server.port=8080
server.servlet.context-path=/shiro
spring.application.name=shiro
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
user.user-name=张三
对应绑定的配置类:
@Component
@ConfigurationProperties(prefix = "user")
@Data
public class User {
private String userName;
}
运行结果:
User(userName=å¼ ä¸)
.properties文件的编码方式以及IDEA的编码方式如下图:
这些配置完之后还是乱码。
猜测应该是把流输入进来,但是没有按照UTF8编码进行解析,采取了别的解析方式。采用原始的读配置文件方式读配置文件,并采取utf8进行解析,代码如下:
InputStream inputStream = UserController.class.getClassLoader().getResourceAsStream("application.properties");
Properties utf8Properties=new Properties();
try {
utf8Properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
String property = utf8Properties.getProperty("user.user-name");
log.info("{}",property);
} catch (IOException e) {
e.printStackTrace();
}
运行结果:
2021-09-12 16:34:14.776 INFO 12028 --- [nio-8080-exec-2] c.t.s.controller.UserController : 张三
说明上述猜测是对的,那么只要配置好springboot的编码方式就可以解决上述问题:
server.servlet.encoding.force=true
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
运行结果
INFO 27248 --- [nio-8080-exec-1] c.t.s.controller.UserController: User(userName=张三)
INFO 27248 --- [nio-8080-exec-1] c.t.s.controller.UserController: 张三