`
Colorful
  • 浏览: 5558 次
  • 性别: Icon_minigender_1
  • 来自: 淄博
文章分类
社区版块
存档分类
最新评论

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 楼 Colorful 2010-08-03  
robertluolinbo 写道
很不错,能补全吗?

已经补齐了,查看详细的文章请移步
http://www.cnblogs.com/lucifer1982/archive/2010/03/20/a-story-of-D-language-string.html
9 楼 robertluolinbo 2010-08-02  
很不错,能补全吗?
8 楼 hqs7636 2010-03-10  
这篇文还没补齐啊。。。 
7 楼 hqs7636 2009-11-14  
知道你忙,逗你玩了
6 楼 Colorful 2009-11-14  
这一阵子忙生意来着,有空一定补完,呵呵。
5 楼 hqs7636 2009-11-13  
说过的话怎么不算数啊。。。 
4 楼 hqs7636 2009-11-05  
还没完吧?
3 楼 wangox 2009-11-05  
 
2 楼 d2008 2009-11-03  
 
1 楼 tomqyp 2009-11-01  

相关推荐

    kr c c programming language

    根据提供的文件信息,我们可以推断出这是一本关于C语言编程的经典教材——《The C Programming Language》第二版,由Brian W. Kernighan与Dennis M. Ritchie共同编写。以下将对该书的部分内容进行详细解析,提炼出...

    The C Programming Language,2nd

    - 这一节介绍了一个字符计数的示例,展示了如何统计文件或字符串中的字符数量。 - **1.5.3 行计数** (Line Counting) - 这一节提供了一个行计数的例子,演示了如何计算文本文件中的行数。 - **1.5.4 单词计数** ...

    C_Programming_Language

    字符指针通常用于处理字符串,书中介绍了如何使用字符指针遍历和操作字符串,以及如何定义和调用接受字符指针的函数。 #### 6. 指针数组;指向指针的指针 指针数组用于存储一组指针,而指向指针的指针则用于处理...

    C Programming Language 英文原版

    字符数组是存储字符串的基础,本节讲解了如何使用字符数组来处理文本数据,包括字符串的声明、初始化和操作,以及字符串库函数的使用。 #### 1.10 External Variables and Scope 外部变量即全局变量,在整个程序中...

    The ANSI C Programming Language (2nd Edition)

    - **字符数组**:详细说明了如何处理字符串,包括初始化和操作字符串的方法。 - **外部变量与作用域**:探讨了外部变量的作用域规则,以及如何声明和使用外部变量。 #### 三、第二章:类型、运算符与表达式 1....

    C语言教程讲义(谭浩强).pdf

    其中,K&R C是基于Brian Kernighan和Dennis Ritchie编写的《The C Programming Language》一书中的标准;ANSI C则是由美国国家标准学会制定的标准,后来被ISO采纳,成为国际标准ISO/IEC 9899:1990;C99是在1999年由...

    《输入、输出、赋值语句》.ppt

    输出语句的作用是:输出常量、变量的值和字符串等系统信息。输出数值计算的结果。 赋值语句的一般格式是:变量=表达式。赋值语句的作用是:先计算出赋值号右边表达式的值,然后把这个值赋给左边的变量,使该变量的...

Global site tag (gtag.js) - Google Analytics