java的默认编码

Posted thinline

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的默认编码相关的知识,希望对你有一定的参考价值。

java的默认编码

比如String.getBytes()就调用的默认编码,流程如下:

会先获取默认编码:String csn = Charset.defaultCharset().name();

如果默认编码有异常则使用:"ISO-8859-1"

那么默认编码如何获取?看了下源码如下

The default charset is determined during virtual-machine startup and typically depends upon the locale and charset of the underlying operating system.

默认字符集是在虚拟机启动期间确定的,通常取决于底层操作系统的区域设置和字符集。

public static Charset defaultCharset() {
if (defaultCharset == null) {
synchronized (Charset.class) {
String csn = AccessController.doPrivileged(new GetPropertyAction("file.encoding"));//系统属性file.encoding设置的编码
Charset cs = lookup(csn);
if (cs != null)
defaultCharset = cs;
else
defaultCharset = forName("UTF-8");//得不到系统设置的编码则用UTF-8
}
}
return defaultCharset;
}

 

file.encoding 设置(运行时可设置):
在命令行中输入 java,在给出的提示中会出现 -D 的说明:
-D= # set a system property
-D后面需要跟一个键值对,作用是设置一项系统属性
对 -Dfile.encoding=UTF-8 来说就是设置系统属性 file.encoding 为 UTF-8
其实就是文件的编码

 

java默认编码理解总结

先看file.encoding设置的编码(eclipse运行时候,为了不乱码会以文件编码运行)

如果没有设置的编码则用"UTF-8"

如果设置的编码不可用则用"ISO-8859-1"

 

注意点:

我们的电脑系统一般都是默认的GBK编码,如果cmd命令编译默认都用GBK。

编译编码(编译用编码和文件编码一致,不然会编译不通过,我猜可能是为了防止编译乱码):javac -encoding UTF-8 Test.java

运行编码(也就是defaultCharset,java会程序用的默认编码)java -Dfile.encoding=utf-8 Test

编译编码和运行编码之间没有必要联系。编译编码(必须和文件一致,保证文件的正确编译),执行编码(为java程序(JRE)设定默认编码)。这也是为什么jar包里的class代码无论在什么编码下都可执行

在使用eclipse混合文件编码时也可编译执行,原因:个人认为eclipse等开发环境会默认使用文件编码格式编译,文件(程序入库的文件)编码格式运行(因为运行的是main()方法,main()可以多个,但程序入口就一个)

在服务器上运行时,不会和eclipse一样自动设置,固最好配置执行编码

以上是关于java的默认编码的主要内容,如果未能解决你的问题,请参考以下文章

如何设置Java JDK的默认编码为UTF-8

如何设置Java JDK的默认编码为UTF-8

如何为 Eclipse 中的 Java 源文件设置为 UTF-8 默认编码

在Java中指定默认文件编码[重复]

Java如何获取平台(操作系统)的默认编码

Java中,内存的字符表示的是Java的unicode编码?系统中的文件表示的是系统的默认编码?