java默认编码_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一样自动设置,固最好配置执行编码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值