java中的代码点和代码单元

本文介绍了Java中如何处理Unicode字符集。随着Unicode字符数量的增长,Java通过引入代码点概念来解决16位char类型的局限性。文章详细解释了代码点与代码单元的区别,并通过示例代码展示了如何获取字符串中的代码点。

背景
在设计Java时决定采用16位的Unicode字符集,因为当时只用不到65536一半的大小就可以存放下Unicode1.0版本的字符集。但是十分遗憾,一段时间之后Unicode字符数量超过了65536个,显然16位的char类型已经不能满足描述所有的Unicode字符的需要了。因此出现了代码点。
代码点
指与一个编码表中的某个字符对应的代码值。在Unicode标准中,代码点采用十六进制表示,加上前缀U+,例如A的代码点为U+0041。代码点分为17个级别。
U+0000到U+FFFF 为第一个级别称为基本的多语言级别,包括经典的Unicode字符。
U+10000到U+10FFFF 为16个附加级别,包括一些辅助字符。
代码单元
UTF-16编码采用不同长度的编码表示所有的Unicode代码点。第一级别的代码点,每个字符用16位表示,通常称为代码单元;剩下16个附加级别的代码点采用一对连续的代码单元进行编码。
在Java中,char类型用UTF-16编码一个代码单元。

public class Example {

    public static void main(String[] args) {

        String a = "Hello";
        int count = a.codePointCount(0, a.length()); //字符串a中代码点的数量,5
        char temp = a.charAt(0);  //字符串a中的第一个代码单元,H
        for (int i = 0; i < a.length(); ) {  //遍历字符串a的每一个代码点
            int cp = a.codePointAt(i);  //返回给定位置i开始的代码点
            System.out.println(cp); //依次输出72 101 108 108 111
            if (Character.isSupplementaryCodePoint(cp)) i += 2;
            else i++;
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值