原本以為對文字編碼問題已經相當了解,沒想到最近又碰上一個狀況。
一直以為,Unicode 比 Big5 收錄更多的中文字元,因此從 Unicode 轉碼到 Big5,可能有部分字集無法轉換;但從 Big 轉碼到 Unicode,則不應該會碰到轉碼失敗的狀況。
但上週試圖從 Big5 編碼的網頁擷取內容時,PHP 的 iconv() 函式卻回報轉碼失敗的警告訊息。比較轉碼前後的檔案,發現原來是「恒春」的「恒」轉碼失敗了。
啊,怎麼會這樣?這下子怎麼辦呢?
想不出什麼好方法,只好先用 Windows VBScripting 將儲存下來的檔案,從 Big5 編碼轉成 Unicode,然後直接用 PHP 來讀取 Unicode 檔。比較耐人尋思的是,或許是因為資料處理的流程發生改變,即使是如此簡單的修改,也讓自己著實花了好一番工夫才完成。
事後,我試了一下,Java 程式也可以正確地轉換「恒」的文字編碼。那麼,為什麼 PHP 就不行呢?查閱相關文件,PHP 的 iconv() 好像是採用 GNU 的 libiconv 來執行編碼轉換的。下載 libiconv 來試試,它真的沒有辦法成功轉換「恒」這個字!
唉,看來連 GNU 的軟體,在中文處理上的可信賴度都沒有想像來的高呢。真是只能用嘆氣來形容自己的感覺了。