unicode编码是占用几个字节?

我查找资料有些说是4个字节,有些说是2个字节,但我个人认为应该是2个字节,因为unicode编码是4个16进制数值,应该只占用了2个字节,但问题也来了,如果只占用了2个字节,那最多也就只能编码2^16个字符,也就是65536个字符,那为什么说unicode能对世界上绝大多数的字符都进行编码了呢?

阅读 32.6k
3 个回答

你的想法是对的。

这一标准的 2 字节形式通常称作 UCS-2。然而,受制于 2 字节数量的限制,UCS-2 只能表示最多 65536 个字符。Unicode 的 4 字节形式被称为 UCS-4 或 UTF-32,能够定义 Unicode 的全部扩展,最多可定义 100 万个以上唯一字符。

2016-06-21 颁发的 Unicode 9.0 共收录 128,237 个字。

Unicode 是一种字符集,Unicode 的学名是 "Universal Multiple-Octet Coded Character Set",简称为UCS。UCS 可以看作是 "Unicode Character Set" 的缩写。

UCS-4 是一个更大的尚未填充完全的 31 位字符集,加上恒为 0 的首位,共需占据 32 位,即 4 字节。理论上最多能表示 2^31 个字符,完全可以涵盖一切语言所用的符号。

UCS 只是规定如何编码,并没有规定如何传输、保存这个编码。例如“汉”字的 UCS 编码是 6C49,我可以用 4 个
ascii 数字来传输、保存这个编码;也可以用 utf-8 编码 3 个连续的字节 E6 B1 89 来表示它。关键在于通信双方都要认可。UTF-8、UTF-7、UTF-16 都是被广泛接受的方案。UTF 是 “UCS Transformation Format” 的缩写。

没错,因此 emoji 就需要用 UTF-16 来编码入库。

试着写下个人看法:
unicode有17个平面,每个平面最多能表示65536个字符。
unicode字符集的基本格式:0x0000~0x10FFFF
16进制表示,前两位代表平面(0~0x10,刚好17个平面),后四位代表平面内表达的字符数(4位,最多655365个字符)。

2字节形式,平面=0,后4位=2字节;
4字节形式,整个unicode码=4字节(实际只需要3字节,计算机里表达都是2的倍数)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏