雷 励
(兴义民族师范学院, 贵州 兴义 562400)
利用计算机数据库来研究《集韵》等韵书具有特殊性。《集韵》作为原始文献与计算机数据库的存在方式有着本质的不同。前者虽为刻本,但仍以书写的形式存在。计算机数据库采用结构化信息模型,以格式化编码的形式存在于存储介质之中,而韵书数字化过程便是把以字符为内容的记录以结构化形式输入计算机数据库。
计算机内字符是以编码的形式存在的,用单个、两个或四个字节(Byte)来记录一个字符(Character),所有字符编码的集合就是字符集(Charset)。根据字符集编码的范围、结构、方式及所含编码字符的多寡可以分为不同的字符集,常见的字符集就有 GB2312、GBK、GB18030、ISO/IEC 10646等。我们在创建《集韵》数据库时基于Windows 7操作系统和MS Access 2007数据库,使用Unicode编码规范,以ISO/IEC 10646为字符集标准。
ISO/IEC 10646被译为“通用多八位编码字符集”,该通用字符集共定义了17个代码平面(Code Plane),代码范围由 U+000000~U+10FFFF,每个平面均由 65,536(256×256)个码点(Code Point)组成①,每个平面的最后两个编码(OxFFFE、OxFFFF)不用。00平面(Plane 00)被定义为基本多文种平面(Basic Multilingual Plane,简称BMP),可用UCS-2表示,即使用16位码元(2个字节),如拉丁字母大写“A”编码为U+0041。其余16个平面为辅助平面(Supplementary planes),代码范围U+10000~U+10FFFF。
ISO/IEC 10646所定义的16个辅助平面超出了UCS-2的字符编码表示范围,需要使用两个16位码元表示,又称代理对(Surrogate Pair)。00平面的U+D800~DFFF编码范围被用作UTF-16代理编码段,U+D800~DBFF被用作高位代理(或称前导代理),U+DC00~U+DFFF被用作低位代理(或称后位代理),高位、低位代理组合最多能表示400H×400H=1,024×1,024=1,048,576个码点,与16个辅助平面的编码范围重合(65,536×16=1,048,576)。
我们再举例说明Windows NT内核系统中的字符编码。打开Windows 7系统自带文本编辑工具记事本,在文本编辑框中输入“”(U+2A00A)字,以Unicode编码保存,再用纯文编辑工具UltraEdit以二进制方式打开所保存的文件,可得该文件的十六进制代码为:
FF FE 68 D8 0A DC
FF FE放在文件开头指示字符编码顺序,表示字符以UTF-16 LE编码,即为字节顺序标记(Byte Order Mark,简称 BOM)。可得“”(U+2A00A)字的UTF-16编码为:
D868 DC0A
高端代理OxD868转为二进制为1101 1000 0110 1000;
低端代理OxDC0A转为二进制为1101 1100 0000 1010。
取高端代理OxD868二进制码元右十位0001101000,再取低端代理OxDC0A二进制码元右十位0000001010,然后合为二十位二进制码元0001 1010 0000 0000 1010,转为十六进制编码为 Ox1A00A,再加上Ox10000(辅助平面起始码点),则可得出“”字编码为U+2A00A。
我们又以同样的方式,在MS Word、Excel、Access中编辑输入“”(U+2A00A)字并存为97-2003格式的.doc、.xls、.mdb文件,用 UltraEdit工具以二进制方式打开所保存的文件,得字符代码段为“68 D8 0A DC”,说明文件均以UTF-16编码存储。
EF BB BF F0 AA 80 8A
EF BB BF为UTF-8编码文件前部的BOM。可得“”(U+2A00A)字的UTF-8编码为:
F0 AA 80 8A
“”字的UTF-8编码转为二进制为:
11110000 10101010 10000000 10001010
众所周知,计算机是通过机内编码进行处理、存储、交换信息的,但字符编码本身不具有形态显示,这就需要字体文件显示编码字符内容。目前盛行的字体文件类型是TruetypeFont(TTF),它由Apple和微软公司共同开发,是一种矢量字体,利用二次曲线描写字形轮廓②。TTF由head、cmap、glyf、loca、post等一系列数据表构成,即对编码字符的字样属性进行描述。显示编码字符时,系统函数会读取相应字体文件,通过字体文件中的cmap数据表查找与字符编码相应的像素索引(或称字形索引),以像素索引为条件检索并返回相关字形参数。之后便再把返回的参数值存储到相应程序的缓存中去,并通过操作系统Gdi函数在窗体中绘出文字图形③。
综上所述,编码是字符在计算机内的唯一身份,对字符进行数据处理即是针对字符编码而言的。计算机字形是对编码字符的图形显现,而字体是字形的属性表,是对字形的数据描述。在Unicode编码空间里,码点不会因未分配字符而空缺,比如,0F平面的OxFAAAA码点暂无字符分配,但码点依仍存在。例如,我们可在MS Word中输入并选定“FAAAA”,按Alt+X键,编码会转换成“□”符号,即表示无字符显示。但并非所有显示为“□”的码点都没有分配字符,因为编码字符需要用字体文件显示。如02平面(SIP)的字,系统中若未安装能显示02平面编码字符的字体,则仍显示为“□”。如需显示ISO/IEC 10646编码字符集外的字符时,也可先在0F平面(PUA)内指配码点④,并用FontCreator字体软件修改支持0F平面(PUA)的TTF字体,新增字模和字形索引,并编辑该字形。当然,Windows操作系统在显示02平面(SIP)至0F平面(PUA)的字编码字符,须在注册表中关联。
在整理汉字字形时,亟需汉字构形学理论对个体汉字进行分析,特别是应该引入字位、字样、书写变体、传承变体以及形位、形素等范畴来对汉字字符间进行共时、历时两个轴向的系统分析。字符集编码空间毕竟有限,如果字形凡有差别就分配码点,则现有的17个平面编码空间仍然不够用,这显然不符合经济性原则。当然,从古籍排印及汉字字符信息处理的角度来说,如需保存古籍原貌,自当体现原书字形的所有差别。
ISO/IEC 10646字符集中各编码字符有不同的字符来源(Sources of characters),统一的编码字符规范是在各国、各地区文字规范标准等基础上制定的。CJK认同表意文字(CJK Unified Ideographs)编码表中没有指定编码汉字的代表字形,但列出了中国大陆、台湾、香港、澳门及日本、韩国、越南、新加坡等地区各信息交换标准中所规范的字形,并标注了字形的来源参数⑤。同时在收录整理字符时,为了避免字符重码,ISO/IEC 10646标准还定义了表意文字认同规则⑥。
根据该认同规则,应被认同的汉字字形只指配一个字符编码,也即认同为同一个编码字符。对字形近似的非同源汉字(non-cognate characters)字形则分别编码,如“士”(U+58EB)和“土”(U+571F),再如“朏”(U+6723)和“胐”(U+81A7)。认同规则还定义了两个步聚:对构字部件间结构的分析(Analysis of component structure)、对构字部件特征的分析(Analysis of component features)。构字部件特征的分析又包括构件数量、相对位置、下位构件及其结构等方面的比较分析。认同规则还规定:构字部件层面的差异以及构件间的结构关系、位置关系的差异不作认同,如“崖”“、厓”“,峰”“、峯”“,夹”、“夾”等字形之间的差别;对于同源汉字,若仅在笔画等形素上有细微差别,则可作认同处理,认同规则中还列举了笔画出头、相交、相连、带钩等11类实例,如“”、“”,“”、“”等。
为保持中国大陆、台湾地区、韩国、日本等地区信息标准交换码的完整性,ISO/IEC 10646表意文字认同规则还列出了对所含字符不作认同的4组信息交换标准,并附有举例说明。例如“,刃(U+5203)、刄(U+5204)(U+2F81E)”在 ISO/IEC 10646字符集中分别占有3个码位,“刄、”为“刃”字的字样变体,若依认同规则,本应合并为一个编码字符,分别编码主要因其分属不同地区的标准字符集。又GB2312与CNS 11643-92部分字符的字形完全相同,但ISO/IEC 10646在02平面仍给CNS 11643-92的这部分字符分配了码点,如“ ”字就有U+4039、U+2F949两个编码。这些字符被分别编码,当然不能归类于字位层面的收录整理。编码字符是一个二维平面的字符序列,每个编码字符不一定都等同于字位,线性的编码序列如何更好地体现字位及字样层位关系需待更深入研究。
在古籍数字化的过程中,自始至终都存在字样提取和整理的过程。对整理程度的不同要求,也造成了字符认同程度的不同。例如,对异体字的处理便涉及是否应改换为现行规范字形以及划定异体字改换范围等方面的问题。尉迟治平也认为:“为了正确认识和处理数码汉字的异体问题,必须引入字位的概念。”[2](p.121)尉迟还提出整理古籍时应先从字位的概念出发,甄选通行字作为代表字。一般来说,对字样的提取和整理,应该根据古籍处理的目的和学术研究的需要,制定相应的标准,针对古代韵书收字的整理研究,应该采取较严的标准,亦即充分体现字形的差别,尤其是对韵书中字头的字样提取和整理。我们提取和整理字样时必须坚持以下两条原则:一是字形的差别若是反映了记词功能的区别,那么即使是再细微的差别,也不能将之认同为一个字符;二是在字样提取和整理的过程中,字符的认同或区分,必须使用统一与连贯的标准,不能出现前后矛盾和不一致的情况。
韵书字样的提取与整理是创建韵书全文数据库的基础,所谓字样提取就是把字样输入计算机而录为编码字符的过程。我们按原书顺序提取《集韵》字头字样时,常以形码(五笔输入法)检索编码字符。例如,平声东韵的“”字,其五笔形码为:GJII。通过五笔码,可检出“東”(U+6771)字,之后在《集韵》数据库中输入编码字符“東”记录该字头,并录入其字符编码U+6771。
在提取《集韵》字头字样时,我们尽量采用字形完全相同的编码字符录入,以保持原书字形。例如,平声寒韵的“刋”字,《集韵》潭州本、明州本、金州本分别作“”、“”、“”,注“《说文》:剟也”。按:《说文·刀部》小篆形作“”。《龙龛手镜·刀部》作“刋”,注“口干反。刋定,除削也”。ISO/IEC 10646字符集内相应的编码字符有“刊”(U+520A)和“刋”(U+520B)2字,今“刊”为通行字。我们在提取字样时,字头记录为“刋”,并在相关字段中再输入“刊”,以沟通其与通行字之间的关系。再如,上声语韵的“吕”字,《集韵》潭州本、明州本、金州本分别作“”、“”、“”,注“《说文》:脊骨也。昔太岳为禹心吕之臣,封吕侯。或从肉、旅。一曰:吕,阴律。亦姓”。按:《说文·吕部》小篆作“”,《王三》作“呂”,《切三》、《王二》均作“吕”。《九经字样》云“:呂,隶省作吕。”⑦ISO/IEC 10646字符集内相应的编码字符有“吕”(U+5415)和“呂”(U+5442)2字。我们在提取字样时,字头记录为“吕”,并在相关字段中再输入“呂”,以沟通它们的关系。
还有一些字样,字形构件本不混同,分别有不同的来源,但《集韵》所录已经不作区别。为保持《集韵》原书面貌,我们仍选择与《集韵》字样相同的编码字符输入。例如,平声文韵收“颁、朌”3字,《集韵》潭州本、明州本、金州本所收“朌”字分别作“”、“”、“”,并注“大首皃。一曰:众皃。或从肉。亦作”。按:《正字通·肉部》“月”字下注“肉字偏旁之文本作肉。石经改作,中二画连左右,与日月之月异。今俗作 以别之”。ISO/IEC 10646字符集内相应的编码字符有“朌”(U+670C)“、肦”(U+80A6)2字,我们在提取字样时,字头仍记录为“朌”(U+670C)。
当然,计算机编码字符的字形不尽与《集韵》字头重合,如在字符集中挑不出字形完全相同的编码字符,便以ISO/IEC 10646字符集标准中的表意文字认同规则为参照,并在汉字构形学理论的指导下,通过深入分析字符间的字形、字构、字用的异同,逐一确认字样与编码字符的对应关系。若字形间的差别标记了记词功能的不同,则必作区分。例如“,”字竖笔带钩,而编码字符集中的“東”字竖笔不带钩,而该字形差别并不影响记词功能,根据认同规则,对此差别可以不作区分。对于ISO/IEC 10646字符集内无相应编码字符的《集韵》字样,可在0F平面内分配码点,并在相应字体中新增字模。例如,《集韵》平声齐韵收“睽、”2字,注“乖也。古作”。我们在0F平面分配U+F007C码点给“”字,而字体中所新增的字形作“”。
《集韵》有的字样在ISO/IEC 10646字符集中仅有记词功能虽相同而字形稍异的编码字符与之对应,为减少在系统字体中新增字模的工作量,我们一般就以本编码字符记录《集韵》字样,同时也在相应的备注字段中记录该差别。例如,平声脂韵收“、葵”2字,注“:《说文》菜也。隶作葵。”按:《说文·艸部》小篆作“”。《集韵》“”乃“”字的隶定形体。ISO/IEC 10646字符集内字形相近的编码字符有“”(U+26B99)。而“”、“”字形差别仅在于前者从“艸”、后者从“ ”。“艸”与“ ”的构件功能本同,因此我们在提取字样时,字头记录为“”(U+26B99)。再如,《集韵》平声支韵收“爲、”2字,注“古作”。按:《说文·爪部》“:,古文爲。象两母猴相对形。”《字汇补·臼部》“:,古文爲字。”则“、”均可视为“”字的隶定形体。ISO/IEC 10646字符集内字形相近的编码字符有“”(U+223FD)“、”(U+2696E)2字,而“”与“”字形貌似更近,因此我们在提取字样时,字头记录为“”(U+223FD)。
为准确展现《集韵》字头字样,也可按《集韵》原书顺序建立数据表,同时截取原书字样的字图,并存为位图文件,而字样位图文件可按【码点+字头顺序】的格式命名。然后再以与字样对应的编码字符码点为数据表主键,建立编符字符与字图的关联。
字样的提取在韵书数字化的过程中处于关键性地位,它直接影响到韵书相关研究成果的准确性。计算机编码字符与原书字样的字形总会有不同之处,诚然我们也可以修改字体数据使编码字符的字形属性与之契合,但编码字符与码点的映射以及编码字符间所体现的区别与联系总是固定的。字样提取和整理,也就是对字符进行认同与辨异。一方面,我们可利用汉字构形学理论,从字位与字样的角度对原书字样进行提取和整理;另一方面,我们也应该尽量地保持韵书原貌。而数字化过程中所遇与原书不相符之处,应详细记录。
注释:
①Unicode标准指出:用来对抽象文字进行编码的整数范围称为编码空间;这个编码集里的每个特定编码叫做码点;当一个抽象字符被映射或被分配到编码空间中特定的码点时,这个抽象字符就被称为编码字符。参见 《The Unicode Standard,Version 6.2》,Unicode Consortium,第 22页。
②微软又和Adobe公司共同开发了Open-Type字体,以三次曲线来定义字形,相比二次曲线,可以用更少的点来描写同样的曲线。
③MS Word嵌入字体保存即是通过读取字体数据,并把数据写入文件,方便其他无相关字体的计算机也能正常显示所有字符。
④ISO/IEC10646定义0F、10平面保留为专用平面(Private Use Plane),又简称 PUA。
⑤见《ISO/IEC10646:2012 Information technology—Universal Coded Character Set(UCS)》,ISO,第 35-37页。
⑥认同规则原文见 ISO/IEC 10646 Annex S(Inform ative)Procedure for the Unification and Arrangem ent of CJK Ideographs。香港又称“汉字统一整合规则”。
⑦见《隶辨·上声·语韵》卷三“吕”字注文。
[1]杨小卫.计算机技术在古代文献整理和学术研究中的应用——《集韵》的XML建模和处理[J].信息科技,2010(10).
[2]尉迟治平.电子古籍的异体字处理研究——以电子《广韵》为例[J].语言研究,2007(3).