初探JDK源码之默认字符集

本文通过分析JDK源码,探讨了不同平台的默认字符集,重点关注String的getBytes()方法。实验显示Windows默认编码为GBK,而Linux默认为UTF-8。SSH远程编码时,本地编码会影响远程会话编码,强调了指定编码的重要性以避免乱码问题。

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

本文首发于个人微信公众号《andyqian》,期待你的关注!
前言

   今天我们以String类中的getBytes()方法为例,来看一看JDK源码,getBytes()方法在帮助文档中是 这样写的:

Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.

意思是:使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

恩,那我们就来对不同平台的默认字符集这个问题。一探究竟。

初探源码
  1. 首先我们进入getBytes()源码中:
public byte[] getBytes() {
  return StringCoding.encode(value, 0, value.length);
    }

该方法中直接返回,StringCoding.encode(value,0,value.length),那就再点击进去看看。代码如下:

static byte[] encode(char[] ca, int off, int len) {
        String csn = Charset.defaultCharset().name();
        try {
            // use charset name encode() variant which provides caching.
            return encode(csn, ca, off, len);
        } catch (UnsupportedEncodingException x) {
            warnUnsupportedCharset(csn);
        }
        try {
            return encode("ISO-8859-1", ca, off, len);
        } catch (UnsupportedEncodingException x) {
            // If this code is hit during VM initialization, MessageUtils is
            // the only way we will be able to get any kind of error message.
            MessageUtils.err("ISO-8859-1 charset not available: "
                             + x.toString());
            // If we can not find ISO-8859-1 (a required encoding) then things
            // are seriously wrong with the installation.
            System.exit(1);
            return null;
        }
    }

在这里,我们看到了,在上述方法中,通过 Charset.defaultCharset().getName() 获取系统默认的字符集。那我们就再点击进去看看,代码如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值