华宇拼音输入法论坛

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 23317|回复: 14
打印 上一主题 下一主题

国际标准超大字符集字体支持包的安装问题

[复制链接]
跳转到指定楼层
1
发表于 2010-7-11 08:42:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unifont在xp下安装是不会有什么问题的,xp本身的fontlink也很少很简单。
但是unifont在win 7下安装还是会有一些问题,其链接的fontlink不能够生效。其实win 7的simsun和simsunb字体已经支持CJK Ext-B的70244个字了,基本上能够保证紫光输入法输入界面不出现天窗,毕竟CJK Ext-C的4000多个字,多半是一些偏旁部首、笔画和符号,本身就是没有拼音的。实际安装unifont后,其fontlink并没有生效,其实就是添加sun-extA和sun-extB两个字体的链接,去掉原有simsun到simsunb的链接。不过,由于win 7本身的fontlink就很多,而且根据一些网友的测试,win 7的fontlink和xp还是有些不同的,xp是从上往下取的,而win 7是从下从上取的。这点可能也是unifont出的较早,没有注意到的问题,实际情况看添加的fontlink并没有生效。其实在win7下最简单的方法就是提取出unifont中的sun-extB字体安装后,在fontlink里面修改一下simsunb的字体链接,链接到sun-extB就可以了,当然要添加在最下面,这样的话会优先去找sun-extB,现在unifont添加的link往往在上面,系统不会优先去找,而是会到一些英文字体中找,而英文字体又会重新链接到simsun,就形成了一个无效循环,具体win 7的字体链接原理还是有待测试。

还有一个很有意思的现象,逍遥笔手写输入法也是支持输入CJK Ext-B的70244个字,其本身的安装包不到10M,但是其输入法界面确是直接可以显示所有的7万个汉字,并不依赖于系统的字库。如果说其自带了字库的话,7万字的字库应该不小啊,但看看他的安装包大小,感觉实在是不可思议啊。开发组可以研究一下他的输入法界面字体显示方式。另外,屏蔽天窗的选项感觉没什么用,去掉了天窗,直接就是一个空格了。

[ 本帖最后由 racingstar 于 2010-7-11 08:45 编辑 ]
2
发表于 2010-7-11 09:27:03 | 只看该作者
楼主是高手
3
发表于 2010-7-11 10:48:13 | 只看该作者
4
 楼主| 发表于 2010-7-11 11:24:28 | 只看该作者
win 7下的字体链接还是有变化,刚才试了很久,还是不能够成功链接。先不说fontlink的调用顺序发生了变化,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanguagePack]下面的组织结构也有点变化。
不过影响不大,CJK Ext-C的那4000多个字要用到的机会实在是少之又少。
5
发表于 2010-7-11 18:19:14 | 只看该作者
楼主确实是高手,领教过的~















您的紫光拼音输入法有问题吗?
6
发表于 2010-7-12 11:53:48 | 只看该作者
根据我的仍不全面的研究和试验,显示CJK-ExtB、Ext-C的字符,并不是依靠字体链接机制(...\FontLink\SystemLink),而是字体回退机制(...\LanguagePack\SurrogateFallback)。

字体链接机制的作用范围似乎还是在BMP(U+0000~U+FFFF)之内,其链接顺序之别,并不会造成某些字符能否显示,而是会干预以什么样的艺术造型来显示,比如说对一款本没有中文字符支持或中文支持不够多(XP下的楷体和仿宋,只有GB2312集合的6000多汉字)的字体,链接以华文中宋、方正硬笔楷书GBK(需自主下载安装)之类的个人心仪字体,就能在一定程度上按照自我的审美趋向来展现字符。

字体回退机制的作用范围是BMP之外,配置单位是字符平面,一个平面管64K个字符,CJK-ExtB、Ext-C位于第二字符平面(序号从0开始,0号又称BMP,基础多语言平面),所以在...\LanguagePack\SurrogateFallback下,配置一个字符串值Plane2,表示遭遇U+20000~U+2FFFF的字符,如果当前字体不能显示某字符,就回退到该配置指定的字体上去。Windows XP的字体回退策略较为简单,只有一个全局的设定,也就只能做到以一种样子(一般是宋体)来秀;Windows 7对这个机制进行了些扩充,实现了被我称为“定向回退”的机制,其具体方案是可以针对各款字体分别设定回退字体,专向的回退条件不能达成时,才启动通用的回退设置,在W7下查询注册表配置,很容易猜测,如此,使用W7的高级用户便可以自行配置注册表,让字体显示机制中更多地体现个人意志。

字体链接和回退还有点儿差别在于:更改字体链接配置后必须重启系统才能生效,更改字体回退机制一般不需要重启。

关于字体关系,本人对windows系统心存一些遗憾:字体链接现在还不支持级联链接,例如把“宋体”链接到“楷体_GB2312”,可以使得“楷体_GB2312”能以宋体的样子显示GBK中超越GB2312的字符,但是宋体不包括Unicode PUA区域的95个字符,即便再将“宋体_PUA”链接到宋体,“楷体_GB2312”也不能经过两级关联而具备显示那95个字符的能力。期待微软以后对字体链接的机制也加以扩充。

对于宋体和新宋体,也谈谈个人的见解:两者字形相仿,但是新宋体比宋体多出了上文提到的95个字符,且设计为等宽,当有需要把两个英文与一个中文等宽来方便操作的时候(例如在UltraEdit中,选择列模式,实现批量插入、删除字符等),新宋体是很好的选择,因此,在我看来,新宋体可以全面取代宋体。
7
 楼主| 发表于 2010-7-12 13:23:49 | 只看该作者
Z版主是高人,.\LanguagePack\SurrogateFallback下的变化我也注意到了,有针对明细体和宋体的字体回退设定,此外还有默认的simsunb的回退,但是一个很奇怪的现象是我删除了默认的simsunb的字体回退后,发现针对特定字体的回退并没有起作用。。。
显示CJK-ExtB、Ext-C的字符,并不是依靠字体链接机制(...\FontLink\SystemLink),而是字体回退机制(...\LanguagePack\SurrogateFallback),终于明白了,之前在xp下也发现LanguagePack一定要存在才能显示扩展字符。Z版的研究很赞,一下子明白了很多东西。

[ 本帖最后由 racingstar 于 2010-7-12 13:25 编辑 ]
8
发表于 2010-7-12 14:57:06 | 只看该作者
悄悄地问7楼,什么是字体回退?
9
 楼主| 发表于 2010-7-12 16:19:41 | 只看该作者
定义在\LanguagePack\SurrogateFallback里面的。
根据Z版的解释,字体链接只作用在BMP(U+0000~U+FFFF)之内,就是字体链接只在双字节unicode编码中有效。
U+20000~U+2FFFF这样四字节unicode编码的字符需要在\LanguagePack\SurrogateFallback定义字体回退调用才能显示。
10
发表于 2010-7-12 17:06:22 | 只看该作者
似乎有点明白。找点资料放这里,以备今后搜索。

  Uniscribe
  Uniscribe是微软公司开发的Windows操作系统为正确演示Unicode文字而开发的组件。系统的核心是一个名为USP10.DLL的DLL。它从Windows 2000开始连同Windows一起捆绑;Win9x的用户在更新至Internet Explorer 5.0之后,系统亦会安装有本组件。此外,Windows CE从5.0开始亦支援Uniscribe。

Uniscribe 如何更新
  虽然Uniscribe从Windows 2000开始随系统提供,但不同版本的Uniscribe对各地不同的文字有不同的支援:最初的版本只支援显示泰语、越南语,之后到希伯来语和阿拉伯语。从Windows XP开始支援几个主要的南亚文字及亚述语,但僧加罗语、高棉语、缅甸语及各种使用蒙古文字的语言,由于他们的具体编码方式在Windows XP推出时还未落实,因此未能正式支援。现时不少为这些语言而设计的软件,在USP10.dll未更新之前,都不能正确操作。
  其实要这些软件正常操作,只要软件连同USP10.dll一起付运就可以。然而,微软并未允许开发者把usp10.dll连同他们的软件一起捆绑,所以现时一般人要更新本档,都要先行加入一个微软在MSN Groups开设的字型设计讨论区,然后再从讨论区下载更新档,再利用管理员权限登入电脑,才可以更新本档,非常费时失事。

Uniscribe USP10.dll
  USP其实是英语Unicode Scripts Processor的简称,意思就是“Unicode文字系统处理器”。它主要包括以下的部件:
  把文字从输入次序重排成为显示次序
  把文字按前文后理作出适当的变换
  按文字显示的方向作出字符的替换
  现时最新版本是随同Windows Server 2008 RTM、Windows Vista SP1等所附带的版本1.626.6001.18000。


USP10.dll文件细节
  文件路径: C:\WINDOWS\system32 \ usp10.dll
  文件日期: 2002-08-29 14:00:00
  版本: 1.409.2600.1106
  文件大小: 339.456 字节
  检查和和文件Hashes
  CRC32: 9DA76CA6
  MD5: 06E2 217D 2AF7 50D6 69C8 AACE DD28 090B
  SHA1: 7B9A 2876 45A6 A25B 8867 0229 49FE D6E6 816F 6A32
  版本资源信息
  公司名称: Microsoft Corporation
  文件描述: Uniscribe Unicode script processor
  文件操作系统: Windows NT, Windows 2000, Windows XP, Windows 2003
  文件类型: Dynamic Link Library (DLL)
  文件版本: 1.409.2600.1106
  内部名: Uniscribe
  法律版权: Microsoft Corporation. All rights reserved.
  原始的文件名: Uniscribe
  产品名称: Microsoft(R) Uniscribe Unicode script processor
  用途:usp10.dll是字符显示脚本应用程序接口相关文件。也可能为病毒
11
发表于 2010-7-22 00:01:26 | 只看该作者
此帖技术含量高,有价值,必须顶
12
发表于 2010-7-22 00:28:56 | 只看该作者
ZXD4G和racingstar看来是字符编码问题的高手,我有很多问题想请教他们,不知两位通常什么时候上来论坛?
13
发表于 2010-7-25 16:45:30 | 只看该作者
ZXD4G和racingstar看来是字符编码问题的高手,我有很多问题想请教他们,不知两位通常什么时候上来论坛?
14
发表于 2010-11-16 21:29:34 | 只看该作者
学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|华宇拼音输入法网站  

GMT+8, 2025-12-25 14:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表