在eclipse中,以.properties后缀的属性文件默认是ISO-8859-1,即字节编码,这种编码方式向下兼容ASCII,而Unicode编码与ISO-8859-1标准兼容,UTF-8则是对Unicode进行了编码,是其一种实现方式。UTF-8(8-bit Unicode Transformation Format),是一种变长的编码方式,它以8位为码元,用1-6个码元对Unicode进行编码,对英文字符使用单字节编码,对中文编码用到三个字节来编码。
所以在默认编码格式为ISO-8859-1的属性文件中直接输入中文显示的并不是中文,而是这个中文的ASCII码,当然也可以在preferencds>content types>Text中修改为UTF-8,这样在属性文件中输入的中文会直接接显示中文,而不是ASCII码了,但是在程序中读取的中文是乱码,猜测应该是spring boot中属性文件默认的编码格式是ISO-8859-1,所以在读取里面的参数时也是以这个格式读取,因为你已经把属性文件的编码格式改成了UTF-8,所以springboot在注入属性参数的时候以ISO-8859-1的编码格式读取编码格式为UTF-8的内容就会乱码。
最后,我把属性文件的编码格式改成了默认的ISO-8859-1,输入中文显示的是ASCII码,然后再输出到浏览器页面上就显示正常了,浏览器采用的是自动编码,结果更验证了之前的猜测应该是正确的。为什么说是应该,因为我没有去查看源码,所以还不能下最终判断。
@RestController
@ConfigurationProperties(prefix ="my")
public class TestController {
private List<String>gaox=new ArrayList<String>();
private Loggerlog=Logger.getLogger(TestController.class);
public List<String> getGaox() {
return gaox;
}
public void setGaox(List<String> gaox) {
this.gaox =gaox;
}
@RequestMapping("/gaox")
public List<String> gaox(){
for(Stringg:gaox){
System.out.println(g);
log.info(g);
}
return gaox;
}
}