跳转到内容

Unicode补完计划

本页使用了标题或全文手工转换
维基百科,自由的百科全书

Unicode补完计划Unicode-at-on,简称UAO,官方网站使用的识别系统用字是Unicode补完计画)是台湾电脑用户针对大五码(Big-5)延伸的紊乱、以及微软Code Page 950(Microsoft Windows内建的Big-5转码表)未收录某些常用字(又称缺字问题)以及缺乏对于倚天中文系统中国海字集延伸中的简体中文日文假名日文汉字支持等问题所采取的其中一种解决方案(参看大五码#影响)。透过对Code Page 950的修改,使得原始采用简体中文日语的内容,在复制至ANSI架构的程序时能转换为Unicode补完计划字集下的对应字符,而不会造成缺字的问题(详细字符请参看字符的来源)。它是一个自由软件

除了系统支持,用户亦需安装相关字体才可正确显示文字。

要留意的是“Unicode补完计划”不等于Unicode。当有人说“我已安装Unicode”,通常是将“Unicode补完计划”和Unicode混为一谈。

“Unicode补完计划”也不是用来解决软件显示乱码的问题。电脑内要有相关的字体(例如支持整个Unicode汉字的字体),才能在电脑显示器看到。因为“Unicode补完计划”只包含编码转换表,并不包括字体在内。而有些日语程序装在Windows XP所出现的乱码问题,应使用Microsoft AppLocale等程序去作内部转换。

背景与原理

“Unicode补完计划”的原理是把大五码造字区的区位和Unicode的相关字符作双向对应,以达到无须借助外字集、也能使大五码文件或文件名使用原先欠缺的汉字。

由于大五码仅收录13,060个汉字[1],对不少用户而言确实不足够,例如日语假名、人名、香港粤语字、科学用的特殊字等等都欠缺。长久以来解决这种问题的方式都是加装各种外字集,例如樱花输入法(支持日语假名)、中国海字集香港增补字符集HKSCS)等。但目前世界的潮流是以使用包含最多字数的Unicode为目标。以外字集收录字符根本难以作为资料交换之用,除非对方也安装了该外字集。

在默认状态下,操作系统字码表中,大五码造字区是和“Unicode造字区”作双向对应的,也就是说当电脑读取到某个原先是落在造字区的内码时,电脑会去读取与其相对应的Unicode造字区字符。结果是,由于不是每人电脑内的Unicode造字区都使用同一造字文件,所以把外字集的用字发送给其他人时,对方若无安装相同的外字集,就不能看到里面的内容。

“Unicode补完计划”试图以修改操作系统字码表的方式以解决问题。它把大五码造字区的字符对应到相关的Unicode编码。与造字不同的是,“Unicode补完计划”让这些字符保持了双向流通性。在补完后的电脑上,当这些字符从大五码转变到Unicode存储后,它们全都会被对应到正确的Unicode位置上,之后即使是对于没有安装补完计划的电脑用户,只要他的系统和程序支持Unicode,在读取这些文字时,就完全没有问题。

作业平台

“Unicode补完计划”修改操作系统中的字码表,处理Unicode和非Unicode字码的对应。“Unicode补完计划”首先是在以Unicode架构为核心的微软Windows NT(包括Windows 2000Windows XP)操作系统上开发,之后又支持了以ANSI架构为核心的Windows 98Windows Me

Linux也有另外的用户,开发Linux版的补完计划

Palm上也有另外的用户,开发对应的补完计划:

Unicode架构的Windows

包括Windows 2000Windows XPWindows Server 2003,与未来的Windows系列。

修改的文件:

  • $SYSDIR\C_950.nls:Unicode与Big-5的对照表
  • 如果用户有安装Microsoft AppLocale,安装程序会将$WINDIR\AppPatch\AppLoc.tmp以一个同名的空白只读文件取代。
  • 如果用户没有安装Microsoft AppLocale,安装程序会直接产生一个空白的只读文件:$WINDIR\AppPatch\AppLoc.tmp

ANSI架构的Windows

包括Windows 98Windows ME

修改的文件:

  • $SYSDIR\CP_950.nls:资源管理器显示时使用的转码表
  • $SYSDIR\unicode.bin:负责跟文件系统操作相关的转码表(注:把$sysdir\unicode.bin删除并重启后,系统会使用最原始的默认代码页437显示,在这情况下所有存在于文件名中的中文字都会以‘__’显示,这包括大部分的桌面快捷方式和几乎整个‘开始’功能表)
  • $SYSDIR\GDI.exe在显示字体时,获取字体的文件(将代码页内码依此档内含之转码表转换成Unicode码,再以此Unicode码到TrueType字体档中提取字体)

注:

  • $SYSDIR是代表某路径的一个变量,在Windows XP默认是C:\WINDOWS\system32,在Windows 2000默认是C:\WINNT\system32,在Windows 98和Windows ME默认是C:\WINDOWS\system
  • $WINDIR也是一个路径变量,在Windows 98、Windows ME和Windows XP默认是C:\WINDOWS,Windows 2000默认是C:\WINNT

字符的来源

在“Unicode补完计划”的第2版中,字符的基本来源是引用“中国海字集”,再加上中国海字集所遗漏的简体中文日语和部分香港用字而成。

“Unicode补完计划”的2.40 Alpha 3版,除了大五码原有的符号和汉字外,共收录了4,916个汉字及汉字偏旁、日语的半角全角假名俄语西里尔字母等,涵盖了在GB 2312(不是GBKGB 18030)、JIS X 0208之中出现的所有汉字,和香港增补字符集之中,Unicode码落在U+4E00至U+9FA5中 (即Unicode 1.1版定义)的汉字。(因编码空间不足的关系,并不收录在香港增补字符集的Unicode扩展汉字)

使用上的问题

“Unicode补完计划”原先的立意是避免利用造字,以达成扩展Big-5的目的:但由于Unicode环境尚未成熟、以及用户的误用,“Unicode补完计划”有时反而为用户本身──甚至其他用户──带来其他的麻烦。

网页交换

这是“Unicode补完计划”用户可能会影响到其他用户的最大问题。

一般的网页浏览器电邮客户端,在用户打出非该软件显示画面默认编码(例如写一封用大五码作编码的信件)的字符时,软件会自动把这些字符转换成Unicode引用码,例如“堃”会被自动转换成“堃”;然而在补完后的电脑,由于即使打出的是原非大五码默认的字符,也会被认为是大五码的字符(装了“Unicode补完计划”的系统,在对照字码表后,发现当中有这个字),因此就不会被转换。这也就是说,其他用户不一定能看见该用户所打的字──除非他们也有装“Unicode补完计划”。于是这反而与“Unicode补完计划”的创立宗旨背道而驰:原先避免以外字集解决缺字的“Unicode补完计划”,反而变成另一套外字集。解决方案是,当用户安装“Unicode补完计划”时,会获得一份“HTML外字兼容转换器”(另外也有网络版),可以直接把原本不属于大五码的字符转换为引用码;接下来只要使用这份夹杂着引用码的文件,就能让其他用户也见到这些字符。另一种做法是,像推广樱花输入法一样推广“Unicode补完计划”,使其也变成一种人人使用的非官方标准。然而最终的解决方案是放弃大五码,将网页或信件直接改用Unicode编码。[注 1]

新旧文件名

这是原樱花输入法用户会面临的问题。

在未安装“Unicode补完计划”的电脑,当用户使用樱花输入法为文件命名时,存储在电脑内的文件名虽然是Unicode编码,却是在“Unicode造字区”内的字码;而补完后的电脑,由于字码表已被修改,这些文件名称在Unicode架构的程序的查看下,就会变成空白;而对于ANSI架构的程序(例如ACDSeeWinamp等),甚至会变成无法存取的乱码。这就表示甚至连ANSI架构的操作系统(例如整个Windows 98)都无法存取该文件。另外还有一个问题:若电脑是未安装“Unicode补完计划”的ANSI架构操作系统,以上的状况就会刚好相反(以Unicode架构的操作系统则无此问题)。

解决方案:Unicode补完计划内附一个文件名转换程序,可以把造字区文件名和Unicode文件名互换,但仅能在Unicode架构的操作系统下使用;ANSI架构操作系统的用户必须要手动改文件名。另一个比较有效率的作法:如果是双系统的用户,可以直接在Unicode架构的操作系统下使用改文件名程序,让ANSI架构的操作系统使用。

其他问题

  • Unicode补完计划的编码不兼容于香港增补字符集的编码,两者只能择其一。简单来说,即使Unicode补完计划与香港增补字符集均有某一个字,但因这个字在大五码中的位置不相同,故那个字只能在Unicode的环境下交换,不能直接透过大五码交换。
  • Unicode补完计划会使用到用户造字区;也就是说如果用户有自造字,这些字可能会不见。
PS:如果用户的自有造字放在Unicode补完计划提供的“造字保留区:0xFA40~0xFA63”内的话,则不在此限。
  • 有人表示补完计划会让Internet Explorer的自动选择网页编码准确度下降,但是无法证实。
  • 在安装补完计划后,Microsoft FrontPage在处理Big5编码网页时会运作不正常(包括:存档会当掉导致文件大小归零内容丢失),但是如果FrontPage是处理Unicode网页,就能正常运作。
PS:这个问题只有在用户的Windows其“非Unicode程序语系”是“繁体中文”的情况下才会发生。
  • 对于不是使用系统字码表的软件──例如Mozilla Firefox等跨平台浏览器或Java软件──补完计划会无效,这些软件需要“个别补完”(例如有些社群版的Firefox,就有将补完后的字码表编译进去)。
  • Windows 98的细明体字形(mingliu.ttc)比起Windows Me / 2000 / XP的版本来得旧。旧版字形有不少缺字情况;用户必须在新版Windows中,复制细明体去更新Windows 98的字形文件。
  • Windows 98 / Me的用户需要再安装“中国海字集”,才能正常显示纯文本文件。
  • 由于Windows XP Service Pack 2改进了系统文件保护的能力,而补完计划需要变更一个系统文件,故当出现一个视窗,询问是否要还原此系统文件时,用户必须选择“不还原”此文件,才能安装成功。

不属于Unicode补完计划但内建其字码表的软件

  • PieTTY:SSH与Telnet客户端程序。
  • OpenPCMan:Telnet客户端程序。
  • Firefox 2.0版:网页浏览器。(Big5→Unicode单向使用Unicode补完计划字码表。)[2][3]

相关条目

参考文献

  1. ^ 大五码普遍被认为包含13,053字,但在计算0xA259-0xA261的度量衡单位用字(兙兛兞兝兡兣嗧瓩糎),再减去重收了两次的“兀”(0xC94A)和“嗀”(0xDDFC)后,应为13,060字。
  2. ^ 存档副本. [2010-07-27]. (原始内容存档于2021-11-25). 
  3. ^ 存档副本. [2010-07-26]. (原始内容存档于2021-11-17). 

参考文件

外部链接

备注

  1. ^ 注:但是在原本就只有ANSI的网络环境下──例如Telnet BBS──Unicode补完计划还是只能当外字集用。此时用户可以选择有内建特殊字码表的Telnet程序,如PieTTY,即无须安装“Unicode补完计划”。