深入理解String.getBytes()中编码问题

本文详细解析了Java中String.getBytes()方法的工作原理,包括如何确定默认字符集的过程,以及在不同容器如Tomcat中该方法可能的行为变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看jdk的源码得知,String.getBytes()的源码如下:
public static Charset defaultCharset() {
if (defaultCharset == null) {
synchronized (Charset.class) {
java.security.PrivilegedAction pa =
new GetPropertyAction("file.encoding");
String csn = (String)AccessController.doPrivileged(pa);
Charset cs = lookup(csn);
if (cs != null)
defaultCharset = cs;
else
defaultCharset = forName("UTF-8");
}
}
return defaultCharset;
}


可知道: 1.首先获取JVM的默认编码,这个默认编码在java虚拟机启动的时候从操作系统里面的locale和charset获取
2. 如果获取不到默认的JVM默认编码,从字符串所在的文件的编码中获取

3.如果以上都获取不到,那么直接取UTF-8 编码


getBytes()默认使用的编码,是由Charset.defaultCharset()或者System.getProperty("file.encoding")参数决定的。
1、直接运行java的main函数可以证明。

2、但是为什么有些容器下,比如tomcat,解码用的不是操作系统编码,那是因为tomcat启动时,通过设置上面参数搞定的。在启动脚本里面设置file.encoding=UTF-8
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值