2018/3/2

中文難字與 Html Entities (C#)

工作的環境中會遇到新舊系統交雜以及中文內碼轉換問題。
某系統為Big5編碼,用 Html Entities 儲存但超出Big5編碼範圍的unicode字元,存在資料庫內像是:

伃

瀏覽器顯示出來,會是人字旁的 伃 。

我的工作得把在另一套舊系統內,用非Unicode造字的姓名找出來。當初公司本來採用另一套造字管理程式。由於這些字的內碼沒有規則,對電腦而言跟天書沒兩樣,只能利用windows的輸入法整合器手寫,找到跟unicode內一致或相近的字體,丟到網路上查出Html Entity,再回存到資料庫。

現在機器學習成為顯學,本來想過要寫套圖形辨識來比對特徵,把舊有難字轉成圖片,找出unicode的字。後來發現實際執行上人工搜尋雖然笨,但已能滿足需求,只好把自動辨識的 side project 先擱在一邊了。

另外,必須找一部xp跟一部win7以上電腦做比較,確認big5的欄位有沒有字是混到unicode?要確認未來舊的難字系統關閉後,能不能忠實呈現難字。

一定有同行質疑,新系統的值幹嘛不直接存unicode?主要還是要考慮其他人用舊系統回溯查詢的問題。新的系統帶unicode,舊系統帶存有 html entity的值的欄位。這是又大又複雜的系統,所不得不做的考量。

由unicode的字查Html Entity,可以用轉換的;少量可以單筆試手氣,如:

http://jicheng.tw/hanzi/search.php

Html Entity 的大全集可再下面找到:

http://jdawiseman.com/papers/trivia/character-entities-lots.html

此外,在網頁顯示時,瀏覽器會自動轉換成unicode顯示,但在匯轉成excel或csv時,帶出這樣的值會被當成亂碼。在C# 中,必須將其加以處理,但要注意的是,考慮專案跨平台的可能性,不要呼叫 HttpUtility.HtmlDecode

而是使用 System.Net.WebUtility.HtmlDecode(texts);

可以得到相同結果,但有比較大的彈性。

參考出處:
https://stackoverflow.com/questions/13492497/converting-html-entities-to-unicode-characters-in-c-sharp