在Java中处理错误编码的UTF-16(?)

mat*_*cey 4 java string utf-8 character-encoding

我正在做一些关于常见爬网数据集(大型网络爬网)的工作,我一直看到一个奇怪的编码模式,我无法解决如何处理.

我一次又一次看到的模式类似于我猜测的字节序列.50 6f 6b e9 6d 6f 6ePokémon

现在编码模式是不是我的最强点,但我不知道任何编码它是合法代表的é是公正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 Tika [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

rua*_*akh 7

这是ISO-8859-1Windows-1252,后者本质上是前者的超集.使用new String(bytes, "ISO-8859-1")new String(bytes, "Windows-1252").

  • @matkelcey:不客气!我不得不说,我很高兴看到一位能够看到非Unicode输入并且根本不知道它可能是什么的有能力的程序员.不久之前有一段时间,Unicode是例外而不是规则. (3认同)