unicode字符_使Windows系统正常显⽰Unicode规范CJK全部
扩展区字符的技巧
  Unicode在今年3⽉推出13版本,其中中⽇韩统⼀表意⽂字(CJK Unified Ideographs)正式推出⾄扩展G区。然⽽,在⽇常使⽤当中,莫说录⼊并显⽰扩展G区内容,连扩展B-F区的诸多字符都⽆法在使⽤者的操作终端显⽰,此情既有⾏业规范与资源⽅⾯的原因(常规字体不⽀持扩展区众多字符编码),也有使⽤者技能⽔平⽋缺的掣肘。对于要⽤到这些区域字符的⽤户⽽⾔,就没有所谓常⽤字与⽣僻字的说法,反正就是让能使⽤的字符越多越好,本⽂以Windows系统来讲讲如何实现。
  先看两幅对⽐图(均按宋体显⽰)。
㈠未采⽤本⽂所讲⽅法对扩展区字符实施⽀持的情况
中文字符unicode查询㈡已采⽤本⽂所讲⽅法对扩展区字符实施⽀持的情况
  本⽂仅提供解决⽅法,⾄于当中的理论(如单⼀字体⽂件最⼤⽀持字形数量、Fontlink与字体SurrogateFallback的区别、CJK扩展各区在编码平⾯上的布局等等)就不描述了。
  第⼀步就是⽀持扩展区的字体⽂件。扩展A-B区的好,对于Vista及之后的Windows来讲,其⾃带字体及其默认配置已经能完整显⽰CJK基本区与扩展A区所有字符,并可⽀持⼤部分扩展B区的字符。截⽌⽬前来讲,完整⽀持扩展A-B区字符的字体不少,但能局部甚⾄全部⽀持扩展C-G区的字体凤⽑麟⾓。我这⾥提供两个:⼀个是“KaiXinSong(开⼼宋体)”完整⽀持扩展B-F区字符,⼀个是“sim-
ch_n5100”完整⽀持扩展G区字符。字体情况详见下图。
  需要提醒的是,截⽌⽬前为⽌,“开⼼宋体”⽹上流传着⼏个版本,版本号都⼀样,只有⼀个⽀持扩展F区,其它⼏个仅⽀持到扩展D 区,除了像我这样⽤⼯具检验字体的⽅法之外,⽐较简单的⼀个判断⽅法就是选⽤⽂件体积是23451912字节的那个。还有,直接从源发布站点下载的“sim-ch_n5100”字体⽂件是有问题的,在PC端可正常使⽤,但在⼿机端会造成严重问题(下⼀篇⽂章《使Android系统正常显
⽰Unicode规范CJK全部扩展区字符的技巧》会提到),需要⼿动处理⼀下,⽅法很简单,随便⽤⼀个字体编辑⼯具(我⽤《FontCreator》)打开该字体,直接导出⽣成⼀个新的字体⽂件就可以了。
  第⼆步,在获得字体后将其安装到系统中,⽅法⼀⼤堆,包括直接双击、右键菜单安装等等。到此步骤──还没算结束!此时要使⽤该字体来显⽰CJK扩展区字符,就得⼿动在对应程序中指定该字体。毕竟这两个字体(包括其他⽀持CJK扩展B-G区的字体)都不是常⽤字体,程序开发者⼀般不会指定采⽤这些字体,⽽且绝⼤多数程序不⽀持调节界⾯字体,这就需要将这两个字体挂号到系统中或嫁接到常⽤字体⾥,⾏话就称为字体回溯,使在系统默认的⽂本显⽰机制中,能⾃动调⽤这两个字体。
  简单来讲就是在注册表⾥做动作,此乃第三步。操作前可按以下路径先备份原来状态。
路径①:
“[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\LanguagePack\SurrogateFallback]”。
路径②:
“[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanguagePack\SurrogateFallback\字体名]”。
  在这两个路径下分别再建⽴两个字符串值(已有的话就⽤新值替换旧值),名为“Plane2”的取值“KaiXinSong”或另⼀个⽀持显⽰字符编码第2平⾯(CJK扩展B-F区所在)的字体,名为“Plane3”的取值“sim-ch_n5100”或另⼀个⽀持显⽰字符编码第3平⾯(CJK扩展G 区所在)的字体。如图所⽰(路径②以“SimSun”字体为例)。
  XP系统只有路径①,Vista及之后的系统备齐两个路径。两个路径的有效范围与使⽤优先度是不同的。
  路径①习惯上称为全局型或通⽤型,路径②则被叫作定向型。以“Plane2”这个项值为例。
情况⑴如果选⽤的字体具有路径②(即在路径①下拥有它的字体名⼦项),且其下具有“Plane2”项值,则执⾏其字体名路径②的“Plane2”策略,直接忽略路径①下的“Plane2”策略,即便路径②的“Plane2”是⽆效的(如对应标注的字体⽂件受损不存在)且路径①下的“Plane2”有效也如此。
情况⑵如果选⽤的字体没有路径②(即在路径①下没有它的字体名⼦项),或即使具有路径②(即在路径①下拥有它的字体名⼦项)但其下没有“Plane2”项值,则在Win8及之后的系统直接执⾏路径①的“Plane2”策略。
情况⑶如果选⽤的字体没有路径②(即在路径①下没有它的字体名⼦项),或即使具有路径②(即在路径①下拥有它的字体名⼦项)但其下没有“Plane2”项值,则在Win7及之前的系统中,如果选⽤的字体具有简体中⽂脚本,则直接执⾏路径①的“Plane2”策略,否则忽略路径①的“Plane2”。
  搞完后,马上⽣效(已打开窗⼝的程序需要重新运⾏才看到效果)。
  当所运⾏的程序涉及的字符处于字符编码第2平⾯(CJK扩展B-F区所在)时,不管其设定的原来界⾯字体是否⽀持显⽰该字符,都会根据上述3个情况来调⽤对应“Plane2”指向的字体,⽽不是像Fontlink功
能那样,原字体不⽀持显⽰对应字符才备选字体去显⽰。所以,⼜要提醒⼀下,若采⽤的备选字体不恰当,对于某些字符⽽⾔,⽤原字体可以显⽰,⽤备选字体不能显⽰,受制于“Plane2”注册表项的把控,最终效果就是不能显⽰,⽐不实施“Plane2”策略更差。
  “Plane3”的道理⼀样。
  ⽬前主流Windows系统中绝⼤多数应⽤程序是⽀持混合字体(⼜称字体级联)的。本⽂所讲内容有效。也有少量程序⽐较顽固不⽀持该功能,就不能按本⽂上⾯提到的技巧去显⽰CJK扩展区字符。例如Presto内核的⽼Opera浏览器对其HTML页⾯⽂本就不⽀持⾃动字体级联,截⽌今天为⽌所有版本的Photoshop在⽂本图层录⼊的⽂字同样不⽀持字体级联。
  ⽬前这些⽀持到CJK扩展E-G区的字体⼤多数是混合字体,即从⼏个类似⼜不完全相同的字体⾥抽出部分字符,再通过作者团队补充⼀些进去。所以不但美观性⼤打折扣,即使采⽤单⼀字体也会出现不同字体风格的情况。⾏业现状就这样,将就着,先把⽂字正确显⽰,其它⽅⾯暂时不要强求了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。