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 ...
分享到:
相关推荐
《the c programming language》(CLH)《the c programming language》(CLH)《the c programming language》(CLH)《the c programming language》(CLH)《the c programming language》(CLH)《the c programming ...
Hi大家好, 鉴于《The Swift Programming Language》中文文档版本繁杂,避免大家因为版本问题引起学习不便。@未来眼之老码团队 会定期发布最新的中文文档。大家有任何问题欢迎垂询! BR OldCoder Team
C++圣经:《The C++ programming language》第一部分压缩文件(2-1)
值得注意的是这本 书的第二作者Brain W是神一样耳朵科学家,他是《The C programming language》的作者,Brain的《程序设计与实现》也是一本好书。 AWK的学习资料网上一搜一大片,其实只要静下心来把这本书中的代码...
The Swift Programming Language (Apple Inc) Swift 4 epub+mobi+azw3
The Go ProgThe Go Programming Languageramming LanguageThe Go ProgramminThe Go Programming LanguageThe Go Programming LanguageThe Go Programming LanguageThe Go Programming LanguageThe Go Programming ...
《The Swift Programming Language》中文版
这个资源有问题,请不要下载ccccccccccccccc
The AWK Programming Language (AWK 程序设计语言) 中文翻译, LaTeX 排版。 译者:wuzhouhui
最经典的c语言教程,不用多介绍了吧,The C Programming Language, The C Programming Language, K&C, 发明人写的。
第二版的The C Programming Language,高清PDF,非扫描中文版,没有水印,没有页眉页脚的干扰,里面更没有高亮度等阅读过的痕迹。绝对干净。
The C programming language.txt格式
Direct from the creators of the Java™ programming language, the completely revised fourth edition of The Java™ Programming Language is an indispensable resource for novice and advanced programmers ...
The Swift Programming Language中文完整版,内容整理自互联网翻译教程
<The C Programming Language中文译本>
epub格式 直接导入ibooks观看 The Swift Programming Language (Swift 4)方式,....摘要居然要大于100个子,这是不是...
The Rust Programming Language The Rust Programming Language The Rust Programming Language The Rust Programming Language
The Rust programming language, the aim to beat c/c++, used in Blockchain
The Dart Programming Language By 作者: Gilad Bracha ISBN-10 书号: 0321927702 ISBN-13 书号: 9780321927705 Pages: 787 Dart is a class-based, object-oriented language that simplifies the development of ...