UTF-16如何表示Unicode的码点及与char类型的关系

这篇博客探讨了Unicode编码系统,特别是其17个代码平面和变长编码方式。重点介绍了UTF-16编码如何处理不同代码平面的码点,尤其是如何使用两个代码单元来表示超出基本多语言平面的码点。此外,还提到了Java中的char类型与UTF-16编码的关系,以及它如何无法涵盖所有Unicode码点。
摘要由CSDN通过智能技术生成

码点:码点是指在一个编码表中的某个字符对应的代码值
代码单元:字符集的最小编码单位。

Unicode将所有的码点分为了17个代码平面,其中两个字节的码点都放在了第一个代码平面(基本多语言平面)U+0000 ~ U+FFFF,第一个代码平面的码点并没有全部使用,U+D800 ~ U+DFFF这个范围留有他用,而其他一些辅助字符放在了其他16个代码平面,U+10000 ~ U+1FFFF、U+20000 ~ U+2FFFF…U+F0000 ~ U+FFFFF。
在这里插入图片描述

UTF-16编码第一个代码平面时用一个代码单元,而编码2 ~ 17代码平面的码点时会通过一定的算法将其拆成两个代码单元,第一个代码单元在U+D800 ~ U+DBFF范围内,第二个代码单元在U+DC00~U+DFFF范围内,这样我们就可以知道某个代码单元是一个完整的码点还是一个码点的第一个代码单元或第二个代码单元。
在这里插入图片描述
所以码点在第一个代码平面时,UTF-16用两个字节表示;码点在其他代码平面时UTF-16用4个字节表示。这种采用不同长度的编码方式的称为变长编码方式。在Java中char类型描述了UTF-16编码中的一个代码单元,或者说char类型就是一个UTF-16编码表示Unicode码点的代码单元。一个char类型并不能装下Unicode的所有码点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值