Java字符编码—Unicode与UTF-8的区别

本文介绍了Unicode字符集的基础概念,包括码点、BMP字符与增补字符的区别,以及Unicode的几种常见实现方式,如UTF-8、UTF-16、UTF-32等,并探讨了这些编码方式的特点及应用场景。

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

Unicode字符集

Unicode,是计算机科学领域里的一项业界标准。为每种语言中的每个字符设定了统一并且唯一的整数值,把这个数值称为码点(Code Point)。
但是它并不规定计算机如何存储和传输这个数值(以多少个字节存储,是定长还是变长,Unicode没有字节长度的概念)。

Unicode 定义了一个码点空间包含1,114,112个码点,范围从0到0x10FFFF,也就是说,它仅仅是一个字符映射集。其中 0x0000 ~ 0xFFFF 的字符表示常用字符集,称 BMP字符,0x10000 ~ 0x10FFFF 字符叫增补字符。

Unicode 目前规划的总空间是17个平面(平面0至16),0x0000 至 0x10FFFF,每个平面有 65536 个码点。
例如,"AB中国"这个字符串,对应的 Unicode 编码为:

A  -> \u0041
B  -> \u0042
中 -> \u0049
国 -> \u56FD

Unicode的实现

同一 Unicode 值可以被编码成不同的二进制表示,以便在存储和网络上传输。Unicode的实现:UTF-8、UTF-16、UTF-32、UCS-2等。

UTF-8, Unicode Transformation Format – 8-bit

  • 使用 1 ~ 4 个字节变长编码表示「1,112,064」个 Unicode 码点
  • 兼容 ASCII
  • 码点数值越小,使用的字节数越少,出现的频率越高

UTF-16

  • 使用 1 ~ 2 个 16bit 变长编码表示「1,112,064」个 Unicode 码点
  • 它扩展于固定16bit长度的UCS-2

UTF-32

  • 4 字节定长编码
  • 其高位均为0,空间浪费比较严重,因此应用很少

Java 使用何种编码

Java char 占 2 个字节,使用 UTF-16 表示一个字符。由于它只使用 2 个字节,所以 char 只用能表示部分UTF-16编码,即0x0000 ~ 0xFFFF。对于 4 字节的 UTF-16,需要使用 2 个 char。

Java 源文件和 class 文件,默认采用平台编码用于存储,Linux/Unix是UTF-8,Window 采用 GBK。一般常用的 IDE 如 Intellij IDEA 和 Eclipse 都能提供多种编码。

Java 中把 String 转换成字节码,默认使用平台默认的编码。看看 getBytes 的注释。

    /**
     * Encodes this {@code String} into a sequence of bytes using the
     * platform's default charset, storing the result into a new byte array.
     *
     * <p> The behavior of this method when this string cannot be encoded in
     * the default charset is unspecified.  The {@link
     * java.nio.charset.CharsetEncoder} class should be used when more control
     * over the encoding process is required.
     *
     * @return  The resultant byte array
     *
     * @since      JDK1.1
     */
    public byte[] getBytes() {
        return StringCoding.encode(value, 0, value.length);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值