2014年6月8日 星期日

讓Windows 7支援全字庫的 Unicode 第15字面字型

Windows 7 依循 Unicode 5.0,提供細明體、新細明體、(簡)宋體的Unicode 第0字面(BMP)及第2字面的中文字型共七萬餘字,再加上BMP的使用者造字區6400字供使用者自行擴充,一般使用已經足夠。
但中文字以型為主,可以變化多許多相似型體,超出目前 Unicode已定義的範圍,為了處理這些字,由行政院研考會(已併入行政院國家發展委員會)發展的全字庫unicode 第15字面的宋體(即明體(註1))及楷體字型各18000多字。這些字體可以從「http://www.cns11643.gov.tw/AIDB/cns_authorization_apply.do」下載(授權說明見:http://www.cns11643.gov.tw/AIDB/copyright.do)
原本我以為安裝了字型檔就可以顯示文字,但安裝以後才發現除了「全字庫正楷體」(第0字面)外,「全字庫正楷體Ext-B」(第2字面)及「全字庫正楷體Plus」(第15字面)在 MSWord 2010 沒有作用 (Excel 及 PowerPoint 可支援),為什麼會發生這種事?原來Word 會自己判斷字型檔的適用語系(CodePage),而全字庫的 2、15字面字型的CodePage 只設為 437 (US),只要 CodePage 多勾選 950(繁中)即可正常(註2)。
全字庫正楷體可以正常使用

全字庫正楷體第2字面在Word2010無作用,仍自動選用新細明體字型

全字庫正楷體第15字面在Word2010無作用

但多勾選 CodePage950 也僅是在應用程式中「可選擇套用」第15字面字型,對於只能選用單一字型的系統(如檔案總管、記事本)還是無法正常應用。為了讓OS可以自動選用第15字面的字型,必須對 Windows 7的註冊表(使用 regedit.exe)做些修改
未完成註冊表修改前,不會自動引用 TWKaiPlus

未完成註冊表修改前,不會自動引用 TWKaiPlus
為了操作方便及對比,我已利用  FontCreater 將「全字庫正楷體Plus」的字體名稱更名為 「TWKaiPlus」,所以我的系統裡同時存在「全字庫正楷體Plus」及「TWKaiPlus」兩套字型。
註冊檔修改內容:
  1. 先確定  HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts 資料夾內應有一組 TWKaiPlus (TrueType) TW-Kai-Plus-98.ttf,表示字型安裝成功
  2. HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink 資料夾內新增一組「多字串值」
    TWKaiPlus
    MICROSS.TTF,40,48
    MICROSS.TTF
    MINGLIU.TTC,MingLiU
    SIMSUN.TTC,SimSun
    MSMINCHO.TTC,MS Mincho
    BATANG.TTC,BatangChe
    此設定的目的是:引用 TWKaiPlus 時,如果遇到 TWKaiPlus 裡沒有的字型,就依序到 MICROSS.TTF、MINGLIU.TTC...裡去找字體
  3. HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanauagePack 新增一 DWord 值:
    SURROGATE:2
    此設定值是啟用 Windows 7的Unicode SURROGATE機制
  4. HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanauagePack\SurrogateFallback 新增一「字串」值:
    Plane15:TWKaiPlus
    此設定值是啟用 第15字面字型的引用對象,指向 TWKaiPlus
  5. HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanauagePack\SurrogateFallback\MingLiU 新增一「字串」值:
    Plane15:TWKaiPlus
    此設定值是對引用「細明體」時,如有第15字面字型時,指向引用 TWKaiPlus
  6. HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanauagePack\SurrogateFallback\PMingLiU 新增一「字串」值:
    Plane15:TWKaiPlus
    此設定值是對引用「新細明體」時,如有第15字面字型時,指向引用 TWKaiPlus
  7. HKCU\Software\Microsoft\Internet Explorer\International\Scripts\42
    IEFixedFontName:TWKaiPlus
    IEPropFontName:TWKaiPlus
    此設定值是設定IE 引用第15字面字型,指向 TWKaiPlus
完成註冊表設定後,重新登入(或開機),您會發現使用「新細明體」或「細明體」的地方如果有用到第15字面的字時,會自動以 TWKaiPlus 顯示。
完成註冊表修改後,雖然選用「新細明體」,第15字面會自動選用TWKaiPlus
完成註冊表修改後,就算Visual Studio,第15字面也會自動選用TWKaiPlus
一天所需蜨󿿸𢓌𢓍𢓎󿿺𢓍一abCD󿿻󿿼12
一天所需蜨󿿸𢓌𢓍𢓎󿿺𢓍一abCD󿿻󿿼12
在您的電腦,上面的紅字第2、15字面的字應該都看不到,那是因為這個部落格應用程式的設計只支援到 16 bits 編碼,而 2、15字面編碼會用到 32 bits,結果就是一個字被拆成兩個字,這是 Google 部落格設計的問題。不是瀏覽器顯示的問題,千萬不要說瀏覽器不支援15字面,只要有適當的字型檔,網頁在 IE、 Chrome、Firefox都可以正常顯示。

但是...,不是每種應用軟體都支援Windows 7 的自動延申機制,經測試:
  1. Word、Excel 如果選擇「新細明體」或「細明體」時,15字面會留下空格,但如果選擇「TWKaiPlus」,則 0、2、15字面的字都可正常顯示。
  2. PowerPoint 可正常使用,不論選「新細明體」、「細明體」或「TWKaiPlsu」都可以正常顯示。
  3. IE 可以正常顯示,在 FireFox 及 Chrome 第15字面的字體會變成方格
    (這是指瀏覽器本身對字體的支援,並不會影響網頁的顯示)
不同瀏覽器第15字面的支援不一樣!

註1:明體實際應為宋體,明體是日本的用法。
註2:有關設定方式,請參考「修正全字庫的第2、15字面字型檔,讓 Word2010 可正常使用

沒有留言:

張貼留言