Windows造字程式與字元對應表之字型無法匹配問題

今天發現一個超詭異的現象,就是Windows造字程式(EudcEdit.exe)與字元對應表(CharMap.exe)明明確定是同一組字碼,卻出現不同形狀的字符,簡單的說就是文字根本不一樣。

Windows造字程式與字元對應表裡面的文字不一致

經過抽絲剝繭後發現,字元對應表似乎會將造字後的檔案快取起來,舉例來說,我們在已經出問題的電腦裡面打開字元對應表FA40看到了一個文字假設是,然後我們打開了Windows造字程式,在FA40將原本的改了新的造字,然後存檔,又去字型連結裡面連結所有的字型,看起來一切都很完美。

但最終的結果是,造字程式的FA40的確顯示,但字元對應表顯示的卻是

文字不一致會造成怎樣的問題?

現代是瀏覽器的時代,為了罕見字有時候我們會請使用者端下載造字檔案放到自己的電腦(更新造字字型檔),然後瀏覽器透過CSS設定font-family: EUDC;來調用客戶端的系統造字來顯示文字。

而這個文字不一致的問題會形成很嚴重的問題,那就是:明明我已經下載更新造字檔案,罕見字為什麼顯示不出來?(或者是顯示成不對的文字),接下來就是程式設計師跟使用者互相指責的時間了。

證明字元對應表有建立快取

如果你有跟上述描述的情況一樣,可以透過這個方式證明。

  1. C:\Windows\Fonts字型資料夾裡面的eudc*.*全部砍掉。
  2. 重新開機。
  3. 打開Windows造字程式發現,因為沒有造字檔所以確定是空白。
  4. 打開字元對應表後你會發現,先前的造字依然顯示在上面。

由上面的步驟4可以得知,系統的造字檔案明明都砍了,怎麼還會看到先前的造字,一定有快取。

字元對應表的快取放在哪裡?怎麼刪除?

理論上是放在下方目錄,檔名會以EUDC*.tte呈現,例如:eudc.tte、eudc_0.tte、eudc_1.tte...

C:\Users\YourUserName\AppData\Local\Microsoft\Windows\Fonts

系統管理員的權限進來這個目錄下,基本上裡面的檔案全部都會被系統鎖定,所以你只能依照古老的造字替換大法來移除,也就是先改檔名(例如eudc.tte.bak)→重開機→再刪除。

觀察到的現象與結論

相關參考

Windows 造字程式 EudcEdit.exe 字元對應表 CharMap.exe 罕見字 Unicode Big5