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

时间:2011-11-27 00:23:49

标签: java string utf-8 character-encoding

我正在对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 个答案:

答案 0 :(得分:7)

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