因爲工做須要處理大量文件,在此以前須要統一文件編碼。因而研究了一陣如何識別文件編碼,轉碼這一過程相對簡單,而識別確實個難題。因爲整個項目由java編寫,天然一開始就想用java來轉碼了。真正開始寫起來才知道麻煩,除了幾個帶bom的好判斷,其餘的儘管能夠根據編碼方式,編碼範圍來判斷,但識別率仍是過低了。爲此還特意去翻看了幾篇論文,主要是mozilla的那篇,確實仍是須要輔以其餘方法來增長識別率,好比說是經常使用字表。固然這個工做不可能本身去作,統計生成經常使用字表就跑的太遠了。因而拿了幾個mozilla的經常使用字表來作,稍微好了點,但主要是對mozilla的C代碼理解上有很多困難,提供的表也很少,以爲本身這工做作的實在沒水準就擱置了。後來發現mozilla的代碼還有java版的,可是是針對網頁的,不過稍微改動下也能用了,總算是算完成了。
廢話說太多,能夠無視,主要是表達整個過程的艱難。
後來看到Python的一個chardet庫,瞬感Python作這些小處理仍是真強大。
import chardet
f = open('/path/file.txt',r)
data = f.read()
print chardet.detect(data)
返回值會是相似這樣的
一個是檢測的可信度,另一個就是檢測到的編碼。
{'confidence': 0.99, 'encoding': 'utf-8'}