下午看了很多UTF-16的资料,对码元(code unit)的概念反而变得模糊了。
从这个字面意思来看,似乎是想表达“编码的单元” unit of code 的意思。
在某篇文章里,说码元是字符的编码存储在计算机中产生出的概念,换句话说,在UTF-16中,如果某个字符用了16bits的一个整数来映射,在保存时,它就需要消耗2个bytes,因此code unit = 2。
同理,如果是需要使用2个16bits的一个整数映射了某字符,那么该字符的code unit =4。
但是,在UTF-16的WIKI中,有这样一句:
第一个Unicode平面(码位从U+0000至U+FFFF)包含了最常用的字符。该平面被称为基本多语言平面,缩写为BMP(Basic Multilingual Plane, BMP)。UTF-16与UCS-2编码这个范围内的码位为16比特长的单个码元,数值等价于对应的码位. BMP中的这些码位是仅有的可以在UCS-2中表示的码位。
从这句话来看,码元应该就是指“16bits长的最小存储单位”,我个人感觉这才是对的,如果码元=字节数,那似乎太不直观了吧,还不如用字节算了。
求证实!
很不错的问题,已赞。
我仔细看了你引用的维基百科的链接,看了对应的英文版,确认了不是翻译的问题。
我的回答可能不正确,仅供参考吧。
字节是一个存储概念,码元是一个通讯编码传输概念。
ASCII 码元是 7 bit
UTF-8 码元是 8 bit
UTF-16 码元 16 bit
....
你在问题描述中也提到了,码元是编码的单元。
在编码 Character_encoding中有一个例子:
UTF-* 是编码,UCS(Unicode)是字符集。
因为 UTF 是变长编码,所以在第一平面的编码为 16 bit。