2009年6月5日 星期五

要你好看 -- 再談中文字型

隨著 GPS 軟體需要的記憶空間愈來愈大,例如最近的 Mio Spirit 與 PaPaGo X5,可用(free)程式記憶體便寸土寸金。這篇要介紹的便是完全不佔記憶體,並且「幾乎」可以使用任何字型的中文字型安裝方法。以筆者為例,C320 採用新的字型設定,可用空間從 34 MB增加到 42 MB;C310x 則從 36.5 MB 增加到 45 MB。

顯示繁體、簡體中文與日文字型 以及近期筆者提供的一些中文解鎖包裡,使用的都是一樣的字型(微軟細明體),一樣的安裝方法。

選擇微軟細明體字型,主要原因是它支援完整繁體、簡體以及日文,另外它的小字(10 點以下)比大部分字型好看。但是這個方法最大的缺點,便是字型檔案較佔空間(8.41 MB)。

有些台灣的 PND 使用 4.56 MB 的繁體細明體。雖然節省一些空間,但是它並不支援完整的簡體中文。大陸 PND 使用 Simsun 字型的話,則無法顯示繁體字,以及支援完整日文。

根據微軟的技術文件,WinCE 的字型是可以安裝在 \Windows,\Windows\Font 以外的目錄裡,更改此設定的是

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontPath]
"FontPath"="\\My Flash Disk\\Fonts"

此例將字型放在 Mio Device 的新建 Fonts 目錄裡。(請勿將字型放在 SD 卡上,因開機時 SD 卡尚未準備好,有可能造成無法開機。)

此外,尚需更改 FontLink,以最像細明體的 Vista 微軟正黑體為例

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink\SystemLink]
"Tahoma"="\\My Flash Disk\\Fonts\\msjh.ttf,Microsoft JhengHei"
"Courier New"="\\My Flash Disk\\Fonts\\msjh.ttf,Microsoft JhengHei"
"Arial"="\\My Flash Disk\\Fonts\\msjh.ttf,Microsoft JhengHei"
"Times New Roman"="\\My Flash Disk\\Fonts\\msjh.ttf,Microsoft JhengHei"

msjh.ttf 是該字型的檔名,Microsoft JhengHei 是該字型的內部名稱。只要在 Windows 裡,點擊字型檔兩下,打開右上方的 Properties,裡面的 Details 就會顯示出該字型的內部名稱(Title)。

除了上面這些設定之外,我們再加上通常會強制使用亞洲字型的代碼表。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink\SkipTable]
"Courier New"="005c"
"Arial"="005c"
"Tahoma"="005c,00a5,007e,0391-03c9,2026,2116,221a,25a0-25ff"

告訴系統字型連結方式的系統設定。

[HKEY_LOCAL_MACHINE\SYSTEM\GDI]
"FontLinkMethods"=dword:00000001

如果是 WinCE 5.0,還可以使用 ClearType 讓字型更平滑。

[HKEY_LOCAL_MACHINE\System\GDI\ClearType]

別忘了將字型(MSJH.TTF)copy 到 Mio Device 的 Fonts 裡。(由於版權因素,不含字型檔,請自行從 Vista 的 Windows\Fonts 裡 copy)

字型設定檔

心動了嗎?請使用 RegEdit 更改上面這些設定,或是匯入這個字型設定檔(請先解壓),並且 Reset!

這個方法,可以適用絕大多數字型,例如微軟正黑、雅黑,許多華康字型。唯有一個字型,筆者無論如何搞不定,便是使用了兩年的微軟細明體(MingLiU);也是因為太執著於這個字型,讓筆者兩年來不斷地嘗試使用 WinCE 這個外裝字型的功能卻一直無法成功。(有些機器可能沒有這個問題,例如台灣版 Moov)

使用筆者 MioAutoRun 中文解鎖的朋友,可以不用 copy Chinese\*.* 到 Windows 裡,只要 copy Chinese\*.nls。(請記得將字型 copy 到 \My Flash Disk\Fonts 裡。)原先的 MioAutoRun\unlock\registry\fonts.reg,只要下載上面的檔案取代。

Mio Moov 解鎖,請使用 Beta 7,並且參考本文的介紹,自行更改使用其他字型。

如果不想用微軟正黑字型,也可以使用如下的 Unicode 字型(只有全 Unicode 字型,能同時支援繁體、簡體、日文),請記得更改 SystemLink 裡的檔名與字型名稱。

微軟 Arial ArialUni.TTF (Arial Unicode MS)
微軟雅黑 MSYH.TTF (Microsoft YaHei)
華康中黑體 DFU_HMD.TTF (DFPHeiMedium-UN)
華康細明體 DFU_MLT.TTF (DFPMingLight-UN)

此外不需要使用簡體字的朋友,也可自行下載華康繁體字型,例如細圓、細黑、中儷黑、細明體等等來使用,至於內部字型名稱,請根據上面提到的方法尋找。(華康細明體有 Big5 版,請勿與上面 Unicode 版混淆)

希望這個字型設定的介紹,可以讓您輕鬆使用繁體、簡體、日文導航軟體,不但可以不愁看到一堆方框,還節省記憶體空間,提升系統效能。

10 則留言:

Unknown 提到...

版大,經常拜讀您的大作,受益良多趁機說聲謝謝

比較過您第7版Moov機解鎖程式後發現所用
中文字型與本篇似乎有所不同,且fonts.reg程式內所load 的字型在MOOV機內或windows XP Fonts目錄內都找不到,我是否須自行修改呢?
另 fonts.reg已copy 到機器內,但是否它會在開機解鎖過程中自動loadup,還是必須靠手動啟動請賜教 謝謝

Bireley 提到...

在 Moov unlock beta 7 裡使用的是 台灣 Moov 內建字型。當然,可以參考本篇,修改為使用 Vista 的 msyh.ttf(微軟雅黑)等字型使用,該字型一般來說相當好看,只有在小字有時會大小不一,筆劃多的字會變得稍大。

irving 提到...

謝謝大大的佳作

小弟使用mio c720套用板大的字型設定檔
發現記憶體與套用前無異,但確定有變換成不同字型,小弟有試著更換不同的字型檔,也都有更換成功,卻不見記憶體有所變化.不知為何?
(小弟是使用版大的套件unlock)

Bireley 提到...

如果字型安裝成功,可以將 MioAutoRun (unlock) scp 裡 Call "\My Flash Disk\Utils\Mem" 那行去掉,記憶體就不會被佔用了。

或是改變該行 Mem 所使用的 Storage Memory 參數,調整為自己需要的大小,例如 4096 為 4 MB。

irving 提到...

Sorry小弟說的不夠清楚
小弟試過英文機種加掛中文字型確實成功
但此次試用的c720是中文機種卻試不出其成效, 是否中文機無法或無須套用,
小弟的目的是想騰出更多的記憶空間來run..
謝謝版大的回覆

Bireley 提到...

中文機的字型有可能放在 ROM,也可能放在 Flash ROM,如果是前者,通常是開機時載入 \Windows,這種字型無法移除,也無法釋放空間。(使用英文版 WinCE 的其中一個好處便是節省字型空間)

青龍 提到...

感謝您的分享
我成功將mio moov 510解鎖成功,
但是發現中文字型都顯示不出來

使用CECMD.exe時,看不到中文檔名
安裝TCPMP程式時,也是
但是導航系統的中文是顯示正常的
請問要如何解決?

Bireley 提到...

@青龍

CECMD 以及 TCPMP 無法顯示中文可能是檔名並非 Unicode / UTF-8 編碼,加上 registry 裡的 code page 設定並非檔名所使用的語系,例如正體中文(BIG-5),自然顯示不出正確的中文來。

舉例來說,為了讓一些不支援 Unicode 的程式顯示中文,通常要更改下面兩個 key 的值。

[HKEY_LOCAL_MACHINE\nls]
"DefaultACP"=dword:000003b6
"DefaultOCP"=dword:000003b6

由於 Moov 解鎖使用的是 MortScript,可在 MortScript 的官網找一下更改 Registry 的指令,並且存成一個 .mscr 檔,由於 Moov unlock B7 本身已經加入 .mscr 副檔名識別,只要在 CECMD 裡點兩下該 mscr 檔便可執行進行測試(.mscr 最後請記得 soft reset,這兩個值才會生效)。當然,測試完成之後,也可將您的指令加到解鎖的 MainStart.mscr 裡面。

青龍 提到...

RegWriteDWord("HKLM", "SYSTEM\GDI", "FontLinkMethods", 1)

#MyADD
RegWriteDWord("HKLM", "nls", "DefaultACP", 950)
RegWriteDWord("HKLM", "nls", "DefaultOCP", 950)

#
# Restart Moov
#
Reset

對不起上一封,有錯好像不能填 0x3b6
我改成 950 可以過
可以還不能顯示中文

Bireley 提到...

@青龍

如果是直接加到解鎖的 mscr 裡,Moov 必須重新解鎖才會執行這個 registry setting。請問是否重新解鎖過?