Spring中的乱码问题

最近发现一个问题, 中文编码保存到数据库里显示正确, 打印出来却是一串问号, 然后怀疑是平台默认编码的问题, locale命令显示是UTF-8正常, 然后单独编写一个java文件, 编译然后Java命令执行显示也很正常, 唯独在这个系统里打印出来是乱码。 然后怀疑还有其他的编码影响, 经过一番查找, 发现这两个代码:

System.out.println("file.encoding");
System.out.println(Charset.defaultCharset());

输出结果:

ANSI
ASCII

说明不是UTF-8,然后在系统里手动设置System.setEnv("file.encoding", "UTF-8");,然后file.encoding属性打印出来是UTF-8没错, 但是Charset.defaultCharset()还是ASCII。

然后再查找一番, 发现stackoverflow上的一个答案, 他指出file.encoding属性必须在jvm启动的时候指定, 因为进入main方法的时候系统使用的默认编码已经被缓存了, 所以在系统里手动set编码是没用的。因此在启动时加上编码参数:

java -Dfile.encoding=UTF-8 …

然后中文打印出来正常。

另外,Charset.defaultCharset()的值是和file.encoding属性对应的。


https://stackoverflow.com/questions/361975/setting-the-default-java-character-encoding

原文地址:https://www.cnblogs.com/helloz/p/10326258.html