2013-09-24 33 views
0

從詳細的角度來看,如何識別文件的字符集?我發現的一些信息是通過文件的神奇數字來檢查,但是我發現其他文章偏離了這一點。如何以編程方式識別文件的字符集?

我試過用hexdump打開不同字符集編碼的不同文件(例如ASCII/UTF8),並且文件的字符集上沒有文件標識符。

+0

訪問[http://stackoverflow.com/questions/4520184/how-to-detect-the-character-encoding-of-a-text-file] [1]:HTTP://計算器.com/questions/4520184 /如何檢測字符編碼的文本文件 –

+0

在文本編碼猜測不起作用。你應該儘量避免必須這樣做;讓數據來源告訴你編碼。 – bames53

回答

4

僅通過查看原始字節轉儲來識別任意字符集實際上是不可能的。一些字符集顯示了它們可以被識別的典型模式,但是仍然沒有明確的匹配。你能做的最好的事情通常是通過排除來猜測,從具有特定規則的字符集開始。如果文件在UTF-8中無效,請嘗試Shift-JIS,然後嘗試BIG-5等......問題是任何文件在Latin-1和其他單字節編碼中都是有效的。這就是使它從根本上不可能的原因。從任何其他單字節字符集中區分任何一個單字節字符集實際上也是不可能的。最後,您必須使用文本分析來確定解碼的文本片段是否有意義,或者它是否看起來像亂碼,因此編碼可能不正確。

總之:沒有萬無一失的方法來檢測字符集,句點。你應該總是有指定字符集的元數據。

0

對於所有編碼,沒有辦法可靠地做到這一點,並且沒有通用的幻數或標識符。您可以使用啓發式方法來編碼UTF-8等編碼,但在大多數情況下,您只需知道編碼。

1

我寫了檢查UTF-8條的規定(特殊位語法)庫,並通過保持每種語言的100個高頻詞識別語言(S)和相應的字符編碼嘗試。單字節編碼ISO-8859- *通常可以從語言內容中派生出來。

一般來說沒有魔法餅乾。 UTF知道可選的BOM,它更多地用於UTF-16(Little Endian,Big Endian)。

所以也許搜索語言識別器。

相關問題