The D Programming Language 中的字符串一节[I]

4.5 字符串

      在 D 中,字符串是被特别对待的。早期语言设计的两项决定非常英明。首先,D 支持 Unicode 作为它的标准字符集。在今天,Unicode 已经成为最流行和广泛的定义和表现文本数据的标准。其次,D 选择 UTF-8,UTF-16 和 UTF-32 作为它的原生编码,而不是其他受欢迎的编码方案。

      为了理解 D 如何处理文本,我们需要先了解一下 Unicode 和 UTF 的知识。想要深入了解的话,“Unicode Explained”是一个很有用的资料,而 “Unicode Consortium Standard” 文档第 5 版(相当于 Unicode 5.1 版本)则是终极参考。

4.5.1 Code Points

      一旦醍醐灌顶,我们就会明白关于 Unicode 标准一个很重要的事实是,Unicode 分离出的抽象字符概念叫“Code Points(代码点)”;文字表示的概念叫“Encoding(编码)”。这两个概念经常被混淆,因为家喻户晓的 ASCII 标准没有这样的概念。旧式良好的 ASCII 把所有的英文字母以及一些控制码和阿拉伯数字等一一映射到 0 ~ 127 之间的一个数字,总共占用了 7 bit 。因为引入 ASCII 那个时候,大多数计算机只是使用 8 bit(1个字节) 作为一个地址单元。所以也就无所谓 ASCII 编码问题了 : 使用 1 个字节里面的 7 bit 足矣。这就是 ASCII 编码(剩余的 1 bit 留待将来扩展。然而如此美意不幸成为未来不兼容扩展的毒瘤)。

      相比之下,Unicode 首先就定义了代码点。它把数字简单分配给抽象字符 : 字符 'A' 用数字 65 表示;字符用数字 8364 表示,依次表示,等等。定义哪个符号在 Unicode 映射表中的位置和如何给其分配数字是 Unicode 协会的重要任务。这项工作非常伟大。因为对于我们这些使用映射表的人来说,从此不必担心定义和文档的细枝末节了。

      对于 Unicode 5.1 来说,代码点分布于区间[0, 1114111]之间(区间上限更多使用十六进制 0x10FFFF 表示,或者用 Unicode 特定写法 U+10FFFF 表示)。大家对 Unicode 普遍有个误解就是 2 个字节足够表示任意一个 Unicode 字符,这大概是因为早期 Unicode 标准使用 2 个字节来标准化一些语言的缘故吧。实际上,Unicode 的符号要远超 2 字节表示的 65536 个符号 17 倍多(更多的事实是,大多数更高位的代码点自身很少被使用或者还未被分配)。

      不管怎么说,当讨论代码点时,没有必要一定得记起表示法。在最高级别,代码点是一个巨大的在区间[0, 1114111]内的抽象字符实体映射表。此外还有一些细节是在不影响最高级描述正确性的情况下,如何分配数字区间。至于如何精确地按照字节顺序放置 Unicode 代码点则是 Encoding(编码)需要考虑的事情了。

To be continued ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值