倉頡輸入筆記文網友 s793016 留言提到 PRIME(中州韻輸入法) 內含倉頡輸入,簡單試用挺驚豔的(心得容後再寫),不過有個問題:必須新增簡體中文語系才能用,解法是修改 ime.json 檔將語系改為 zh-TW 重新註冊 PIMETextService.dll (參考: 在 Windows 10 下安裝最新版的 PRIME 中州韻輸入法方法 - Hiraku Dev)。修改 Program Files 目錄下的檔案需要管理權限,我選擇用管理者權限開 CMD,切到指定目錄下指令 notepad ime.json 用筆記本簡單修改後存檔,接著下指令跑 regsvr32 跑完程序,不料踩到 Notepad 地雷一枚。

反註冊沒什麼問題,但註冊 PIMETextService.dll 時程式崩潰,註冊失敗~

再做了測試,發現如不修改 ime.json,regsvr32 反註冊及註冊都沒問題。反覆測試了幾次,某次改用 Notepad++ 修改,居然註冊成功了!兇手現身,立刻拘提 Notepad 到案嚴刑拷打。

測試使用 Notepad 更動 ime.json 的一個字元,理論上檔案大小不變。但比對修改前後,發現檔案差了 3 個 Byte。

使用 Notepad++ 開啟修改後的 ime-notepad.json,右下角 UTF8-BOM 足以解釋 3 個 Byte 從何而來。

ime.json 原本的格式是不包含 BOM 的 UTF8,Notepad 存檔時卻自做主張在檔案前方補上 BOM(0xEF 0xBB 0xBF),用 Notepad++ 的 Hex Editor 外掛可以看得很清楚:

換句話說,問題點在於 Notepad 修改 ime.json 時雞婆為檔案補上 BOM,而恰巧 PIME 程式無法識別包含 BOM 的檔案格式且未捕捉到例外,然後... BOOM! 程式就爆炸了~

Notepad 為什麼要雞婆加上 BOM?在一篇十年前文章(BOM BOM BOM - 就是愛程式)找到詳細說明,Notepad 會加 BOM 的行為由來以久,只是我今天才遇上。又長見識了。

最後提一下 PRIME,中州韻輸入法引擎連續輸入整句話字根(不用敲空白)再用詞庫解析的做法感覺相當聰慧,還有自我學習能力,開源開放甚至允許你發明自己的輸入法令人耳目一新。可惜測試期間好幾次因切換輸入法讓應用程式(Chrome、Live Writer)崩潰閃退,穩定性讓人擔憂,暫時是無緣了。


Comments

# by 小黑

若使用 Notepad++ 開啟修改是不是就不會有BOM 的問題?

# by Jeffrey

to 小黑,Notepad++ 開啟時,右下角會顯示目前編碼及是否帶 BOM,我習慣自己去確認是否符合預期。

Post a comment