2011-11-27 24 views
4

我正在做一些關於common crawl數據集的工作(一個大型網絡抓取),並且我一直看到一個奇怪的編碼模式,我只是無法解決如何處理。在Java中處理錯誤編碼的UTF-16(?)

我一次又一次地看到的模式就像我猜測代表Pokémon的字節序列50 6f 6b e9 6d 6f 6e

現在編碼模式並不是我最強烈的一點,但我不知道任何編碼在é僅代表e9有效。

這是一個有點像[UTF-16] [1]這將是fe ff 00 50 00 6f 00 6b 00 e9 00 6d 00 6f 00 6e

而且這絕對不是UTF-8這將是50 6f 6b c3 a9 6d 6f 6e

所以我只是在Java的方式後,我將這些字節解碼爲一個字符串,一個庫是理想的。

new String(bytes)名正言順地不工作,並正確地轉換e9來替換字符ef bf bd(又名可怕)

就如何處理這些任何想法?

更新

我已經結束了使用的Apache提卡提供的字符集編碼檢測器[2]。效果很好。

[1] http://www.fileformat.info/info/unicode/char/e9/index.htm

[2] http://tika.apache.org/0.8/api/org/apache/tika/parser/txt/CharsetDetector.html

回答

7

即要麼ISO-8859-1Windows-1252,前者的後者基本上是一個超集。使用new String(bytes, "ISO-8859-1")new String(bytes, "Windows-1252")

+0

乾杯,字符串(字節,「ISO-8859-1」)的魅力 –

+3

@matkelcey:不客氣!我不得不說,看到一位能夠看到非Unicode輸入並且完全不知道它會是什麼的稱職程序員,我感到很高興。有一段時間不久之前,Unicode是例外而非規則。 – ruakh