采用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: 张三