中文乱码与字符集

一. Charset.defaultCharset()系统默认编码字符集介绍

说明

返回此 Java 虚拟机的默认 charset。默认 charset 在虚拟机启动时决定,通常根据语言环境和底层操作系统的 charset 来确定。

 

Charset.defaultCharset()是操作系统的编码,可以通过虚拟机启动时指定属性-Dfile.encoding=UTF-8,来更改Charset.defaultcharset().

Charset.defaultcharset()指的是jvm输入流、输出流默认使用的编码/解码方式。

 

规则

当我们需要指定编码格式,可以通过JVM参数在启动的时候进行设置-Dfile.encoding=XXX,从而不受操作系统和语言环境的影响.

获取默认编码格式的源码如下:

①当我们不手动设置JVM参数-Dfile.encoding时,系统默认字符集则取决于语言环境和底层操作系统(Windows的CMD下是GBK,Linux下则跟设置的语言环境有关)

②当我们手动设置JVM参数-Dfile.encoding=xxx,如果xxx是不支持的字符集,则默认使用’UTF-8’编码.

 

结论:

字符集默认是操作系统一致,如果指定了-Dfile.encoding=xxx,则以-D参数为准。

操作系统字符集的设置又分为相应的优先级,LC_ALL>LC_*>LANG,LC_ALL是最上级设定或者强制设定。

 

如果系统字符集没有设置,默认一般是POSTX,java中的默认字符集为file.encoding = ANSI_X3.4-1968sun.jnu.encoding = ANSI_X3.4-1968  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章