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

4
我正在处理common crawl数据集(一个大型网络爬行),但我一直看到一种奇怪的编码方案,我无法解决。
我一遍又一遍地看到的模式是一些字节序列,如50 6f 6b e9 6d 6f 6e,我猜这应该代表Poké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

1个回答

7

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


3
@matkelcey:不用谢!我必须说,看到一个有能力的程序员看到非Unicode输入时却完全不知道它可能是什么,这让我感到开心。不久之前,Unicode仍然是个例外而不是规则。 - ruakh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接