2010-02-12 62 views
7

有誰知道是否有一種簡單的方法來檢測Java中的字符集編碼?在我看來,有些程序能夠檢測某個給定數據使用哪個字符集,或者至少能夠進行aproximation。如何檢測Java中的哪些字符集編碼?

我想的基本機制將不得不在每個字符集的數據進行解碼,並挑選哪一個具有最少未定義的字符,隨後的字符集更常見的是打破平局。

任何想法?

+0

什麼輸入,我們談論的?字節數組(二進制)或字符數組(字符串)?那麼你想區分哪些?它可以只爲Unicode字符集(使用字節順序標記)完成,但不能爲其他的可靠性。 – BalusC 2010-02-12 00:06:14

+1

這可能會很棘手。在這個網站pfarland使用一些啓發:http://forums.sun.com/thread.jspa?threadID=279203#3 – mre 2010-02-12 00:10:52

+1

相關主題:http://stackoverflow.com/questions/499010/java-how-to - 確定最正確-字符集編碼對的一串流和http://stackoverflow.com/questions/1888189/java-readers-and-encodings – BalusC 2010-02-12 00:28:47

回答

-3

爲了查找數據是否爲任何Unicode格式(UTF-8,UTF-16等),您可以讀取字節流中的數據並檢查前4個字節(BOM大小),並且對於每種編碼將不同

爲如:

爲UTF-8前3個字節將是EF,BB,BF

比Unicode編碼的其他編碼我不知道......

+4

可選UTF-8 BOM是唯一有用的,如果它是存在:http://en.wikipedia.org/wiki/Byte_order_mark – trashgod 2010-02-12 03:03:16

+0

@sreejith ..上面的BOM溶液只能用來告訴一個文件不是UTF-8(在這種情況下它不會與給定的BOM啓動)。但是如果BOM存在,它可以是UTF-8或不是。對於例如也許對於其他一些文件,最初的字節「EF,BB,BF」實際上是有效的數據。 – 2011-02-18 07:03:12

1

看看jchardet,一個從Mozilla瀏覽器移植的庫,專門用於「猜測」文檔的字符集。

作爲替代方案,所述cpdetector庫,一個較新的位,專門檢測文檔的代碼頁。