中文編碼偵測
2008 年 四月 25 日 (星期五) 1:39 pm分類:電腦
標籤: programming, Java
編碼偵測一直是文件處理、資訊檢索、自然語言處理等任務的前置作業,偵測不好,連字元都無法辨識,遑論後續的顯示、斷詞、檢索、分析?因此,這一直是瑣碎但必要的工作。
在開放原始碼世界裡,常用的編碼偵測系統計有:
- Mozilla Charset Detector
- jchardet
- ICU 的 Character Set Detection 功能
- Universal Encoding Detector
- ROME 的 XML Charset Encoding detection 功能
這些都滿好用的,應該能夠滿足 C/C++、Java、Python 不同族群的需求。
不過因為 Java 對於繁體中文 “Big5″ 和 “MS950″ 有不同的處理方式(請參考蔡學鏞〈Java 繁體中文處理完全攻略〉系列文章),所以有時候必須先測試看看這些程式庫傳回的編碼結果,究竟是 “Big5″ 還是 “MS950″,並在必要時強制轉換,否則「碁」這類的字可能會變成亂碼。
以 jchardet 為例,我們必須在接收 HtmlCharsetDetector.java 所傳回的結果之後,再多一道轉換:
if (charset.equalsIgnoreCase("Big5"))
return "MS950";
return charset;
以 ROME 為例,可以修改 XmlReader.java 的 prepareReader():
private void prepareReader(InputStream is,String encoding) throws IOException {
// 加入以下這一行
if (encoding.equalsIgnoreCase("Big5")) encoding = "MS950";
_reader = new InputStreamReader(is,encoding);
_encoding = encoding;
}
進階閱讀
- charset-detector:自動偵測文件編碼的小程式
- A composite approach to language/encoding detection
(中譯:一種語言/編碼檢測的複合方法) - Determining the character encoding of a feed


追蹤留言回應:以
引用通告 (trackback):![[add to funP]](http://william.cswiz.org/blog/wp-content/themes/william/images/add-funp.png)
![[add to HEMiDEMi]](http://www.hemidemi.com/sticker/user/roxytom.bluecircus.net.gif)
![[add to udn bookmark]](http://bookmark.udn.com/html/help/80_20_02.gif)

2008 年 四月 28日 於 12:13 pm
google translation api 也有提供 lang detection 的功能唷: http://code.google.com/apis/ajaxlanguage/documentation/#Detect
2008 年 四月 28日 於 12:15 pm
ㄟ..我搞錯了, 這是要談分辨中文編碼, 而不是用甚麼語言..:S
2008 年 五月 11日 於 9:30 am
[...] William’s Blog | 中文編碼偵測 [...]