前言:
由于很多场景file.encoding和sun.jnu.encoding总是被一起提及
file.encoding 直译:文件编码
参数说明:
1、file.encoding 不主动配置的情况下,默认使用的是操作系统的编码
2、sun.jnu.encoding 影响类加载时类名的编码
(1):Charset.defaultCharset() Java环境中非常关键的编码设置
(2):URLEncoder.encode(String) Web环境中最常遇到的编码使用
(3):com.sun.org.apache.xml.internal.serializer.Encoding 影响对无编码设置的xml文件的读取
(4):javax.print.DocFlavor 影响打印的编码
小结:
1、文件操作涉及到字节操作和字符操作,在字符操作的时候应该明确指定操作的编码,而不是依赖默认配置,从而避免很多的不确定性,降低外部依赖(耦合)
2、启动应用是应当带上虚拟机参数:
java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -jar xxx.jar
或
java -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 -Djava.security.egd=file:/dev/./urandom -jar xxx.jar
3、如果是解析XML文件等,可能需要调整为-Dfile.encoding=GBK
注意:
Eclipse或IDEA在编译或运行时,会默认增加编译、运行时参数,会影响代码效果,建议在命令行验证如上测试代码。