编程学习biancheng.45soft.com 本站提供了各种在线教程和资料,供大家学习与参考.
编程学习
当前位置: 主页 > Perl > Unicode >

Perl Unicode


如果你还不知道什么是 Unicode,那么你很快就会知道了—— 即使你略过本章,你也会知道——因为利用 Unicode 工作日益成为必须。(有些人认为它是一个必须有的恶魔,但实际上它更象是必须存在的好人。不管怎样,它都是必须有的痛苦。)


从历史来看,人们制定字符集来反映在他们自己的文化环境里所需要处理的事物。因为所有不同文化的人群都是懒惰的,他们只想包含那些他们需要的符号,而排除他们不需要的符号。如果我们只和自己文化内部的其他人进行交流,那么这些符号是够用的,但是既然我们开始使用互联网进行跨文化的交流,那么我们就会因为原先排除的符号而头疼。在一个美国键盘上键入音调字符已经够难的了。那么应该怎样才能写一个多语言的网页能?


Unicode 就是答案,或者至少是一部分答案(又见 XML)。Unicode 是一种包容性的字符集,而不是排斥性的字符集。尽管人们仍然会就 Unicode 的各种细节争论不休(而且的确还有许多可以争吵的细节),但是 Unicode 的总体目标是让每个人在使用 Unicode 的时候都足够高兴(注:或者在一些场合,并非彻底失望。),这样大家就都愿意把 Unicode 当作交换文本数据的国际媒介。没有人强迫你使用 Unicode,就好象没有人强迫你阅读本章一样(我们希望如此)。我们仍将允许人们在他们自己的文化里使用他们原来的排它的字符集。但是那样的话(如我们所说),移植性就会有问题。


痛苦守恒定律告诉我们,如果我们在一个地方减少痛苦,那么在另外的地方肯定会增加痛苦。在 Unicode 的例子里,我们必须经历从字节语义到字符语义的迁移的痛苦。因为由于历史的偶然性,Perl 是美国人发明的,而 Perl 在历史上就混淆了字节和字符的概念。为了向 Unicode 迁移,Perl 必须在某种程度上分清这两个概念。


荒谬的是,我们让 Perl 分清楚了字符和字节的关系,而却又允许 Perl 程序员混淆它们的概念,而依靠 Perl 来保持界限,就好象我们允许程序员混淆数字和字串而是依靠 Perl 做必要的转换。要扩展可能性,Perl 处理 Unicode 的方法和处理其他东西的方法是一样的:做正确的事情。通常,我们要实现下面四个目标:

旧的面向字节的程序不能同时破坏它们原来用来运行的旧式面向字节的数据。

旧的面向字节的程序在合适的条件下应该能神奇地开始在新的面向字符的数据 上运行。

程序在新的面向字符模式下应该和原来的面向字节的模式运行得一样快。

Perl 应该仍然是一种语言,而不是分裂成一种面向字节的 Perl 和一种面向字符 的 Perl。

把它们合在一起,这些目标实际上是不可能实现的。不过我们已经非常接近了。或者,换句话说,我们仍然在向非常接近目标努力,因为这是一项正在进行的工作。随着 Unicode 的不断发展,Perl 也在不断发展。但是我们的主要目标是提供一条安全的迁移路径,这样我们在迁移的过程中只需要最少的注意就可以了。我们是如何做的是下一节的内容。

Perl
Perl Unicode