再论 Unicode

Unicode 规定了一个字符集,由于字符集太过庞大,字符集本身分了基本面。其中最常用的分在了「零基本面」,共包含 6 万多个字符,其中东亚汉字占据了绝大部分。

每个基本面可以用 16 位,也就是两个字节表示。加上标识基本面序号的部分,表示一个 unicode 字符一般需要三个字节的二进制空间,未来有一天可能会发展到需要四个字节表示某些 unicode 字符。

四个字节,2 的 36 次方,足够了。

为什么这么快又再次谈及 unicode 字符集问题呢?

因为看到了红皮算法书中的字符串部分,对字符串有了进一步的认识:字符串本质上就是字符的「串联」,最简单直接的串联方式是「字符数组」。那么此时需要问的是「字符从哪里来」?很简单,字符从数字而来。事先拟定好字符集之后,就可以知道用多少 bit 位的二进制数字来完全映射字符集。因此,字符就是具有特定上下文的二进制数字,字符串就是字节流。

C 语言中,有专门的字符类型,并将最后一个元素为 「空字符」 的字符数组钦定为「字符串」。

再次自我提醒:使用任何一种编程环境时,都务必清楚地了解它所使用的「字符」是什么意思,是已经编码之后的字节流呢?还是未编码,仅仅只是字符集表示的字节流呢?又或者是其它某种形式呢?务必搞清楚。


不知是该恭喜,还是该怎样,总之阅读到该文的,你是第 人。每一次刷新,都是不同的自己。