阿拉伯语数字印刷:问题解析
阿拉伯语数字印刷:问题解析
从最初开始,在计算机上表示阿拉伯文字就充满问题。在本系列中,我们将探讨一些已提出的解决方案。首先,我们需要理解阿拉伯文字在数字世界中究竟有何问题。
阿拉伯文字发展于一千五百年前,最早通过岩石铭文和笔墨得以表达。笔墨成为其事实上的表达方式,阿拉伯文字也在此媒介中发展演变。阿拉伯文字大多数技术层面的特征,都是为了尽可能精确记录《古兰经》而发展出来的回应,例如:延长、合音、停止点和继续诵读点。
印刷阿拉伯语
快进到印刷时代。石版印刷与阿拉伯文字非常契合,因为其技术基于将整页内容如同印章般制备,然后按需印在任意数量的纸张上。但活字印刷技术使得印刷变得更为流行。这种技术并非将一页内容构建成一个印章,而是成百上千个小印章,排成行,每个印章代表一个字母或阅读符号。它被称为“活字”,是因为你可以移动每个印章,并在每页重复使用这些印章,而非每页使用唯一的印章。
![]()
拉丁文字非常适应这类印刷。阿拉伯语的活字也以类似方式基于每个字母发展出来。然而,阿拉伯语的书写并非基于单个字母,而是基于字母块。例如,单词المعروف并非由五个字母写成,而是四个字母块:第一个是ا,第二个是لمعر,第三个是و,第四个是ف。尤其是第二个字母块包含特殊的连字,lām在mīm之上,而mīm呈现为右侧的一个小勾。
请看这张来自Brill Publishers约1890年早期印刷品的放大摘录:
我们看到每个字母都有自己的印章。值得注意的是,Brill实际上将mīm和ḥa的常规连字作为一个印章处理。尽管如此,这里采用的方式使得排版非常不灵活。此外,空白空间导致阅读体验不均匀,有时难以区分单词的结束位置。后一个问题已得到解决;在较新的印刷作品中,我们看不到字母之间的空白。但不灵活性依然存在,并且在20世纪随着多数出版商使用更少的连字而变得更加严重。
计算机上的阿拉伯语
简而言之,正如我们将在这系列文章中所讨论的,活字的这些缺陷转移到了阿拉伯语的数字表示中。看待这个问题持续存在的一个角度是,这些技术——印刷机和计算机——是在基于拉丁文字的社会中发展起来的,因此它们视这种用例为理所当然。世界上其他拥有各种复杂文字的地区,不得不屈服于这些规则。似乎即便阿拉伯语是世界第六大语言,但解决这些根本问题的经济动机仍然不足。
事实上,数字环境甚至进一步加剧了问题。秉承将文本分解为字母的活字哲学,计算机在将阿拉伯语表示为连写字母时遇到了重大困难。请看以下示例:
某个可怜的人决定将“what doesn't kill you makes you stronger”翻译成阿拉伯语,在计算机上打出来,打印后交给纹身师做成纹身。本应连写为ما لا يقتلك يجعلك أقوى的字母,却全部独立呈现。而且我不得不补充,还是用一种极其简单的字体进行的。(这里 是正确制作阿拉伯语纹身的例子)
此外,计算机在理解某些文化是从右向左而非从左向右书写时,也遇到了极大的困难。因此,在输入时,字母的排列顺序可能完全相反。以下是来自巴尔的摩-华盛顿机场的一个例子:
或者这个:
最后,计算机似乎在编码阿拉伯语时也遇到了问题。编码意味着屏幕上的可见表示具有一串计算机可以实际存储的0和1,这串字符串是稳定的,以便可见表示可以被取出并在其他地方重复使用且保持一致。示例将使其更加清晰。
在上图中,我们可以看到,如果我们选中单词hādhihi,复制它,然后粘贴到搜索功能中,会得到一串完全不同的字符。
在上图中,我们在搜索栏中输入كشف,尽管文档中的第三个单词正是كشف,但PDF阅读器却找不到任何类似的内容。
在上图中,大部分情况正常。我们搜索سن,得到了从sinn到sunna到ḥasan到isnād的所有词例。但在搜索结果中,PDF阅读器试图通过加粗搜索字符串来高亮它。这破坏了与前后字母的连接,导致显示效果尴尬。使用阿拉伯语工作,你迟早会遇到这些问题。
Unicode
针对这些问题的解决方案已被提出,但并未得到广泛或准确的实施。有些问题试图通过所谓的Unicode来解决。这已成为数字文本的标准,就像活字对印刷所做的那样。
Unicode仅仅是一个所有公司都同意使用的表格,其中每种语言的每个字符都被分配了一个唯一数字。这意味着数字文本文件是一系列这样的数字,每台计算机都可以按自己的意愿将其渲染为可读的字符。例如,不同字体为同一字母赋予不同形状。因此,可以在不改变数字文本的情况下更换字体。换句话说,抽象字母和实际表示被分离开来。Unicode将这种区别称为字符和字形之间的差异。最显著的例子是中文、日文和韩文(CJK)字符已被统一。只有当使用为中文设计的字体显示文本时,文本看起来才像中文文本。
对阿拉伯语原本也可以实施类似方法,例如区分rasm与变音符号和元音符号。这不仅会解决印刷时代遗留的问题,而且还将超越它,为阿拉伯文字提供一种超灵活的方法,更能体现书写实践及其哲学。然而,Unicode却是将阿拉伯语字母分开编码的。它并没有将ta marbūṭa视为带有两点的ha,而是将其视为一个单独的字母。搜索كثيره和كثيرة在大多数情况下会得到不同结果,尽管按理说这不应该发生。类似的问题也出现在元音符号和其他上方或下方符号上。你可以输入أ,即alif+hamza,Unicode编码为U+0623;但也可以输入أ,即alif和上方hamza,由U+0627和U+0654表示。显然,它们是相同的——都是alif-hamza。但由于编码方式不同,计算机通常不会将它们视为相同。(多数情况下,文本使用alif+hamza字符编写。)甚至CJK那样简单的理念也没有得到实施。我的意思是,一个kāf本应是一个kāf,编码为同一个字母,但在不同书写变体(如阿拉伯语和波斯语)中可能有不同的图形表达。但事实并非如此:我们找到了一个“阿拉伯语kāf”的条目 https://codepoints.net/U+0643,和一个“波斯语kāf”的条目 https://codepoints.net/U+06A9(后者也奇怪地被称作“阿拉伯语”)。