我正在做一些关于 common crawl 的工作数据集(一个大型网络抓取),我一直看到一个奇怪的编码模式,我只是不知道如何处理。
我一次又一次看到的模式类似于字节序列 50 6f 6b <strong>e9</strong> 6d 6f 6e
我猜这是代表 Pokémon
.
现在编码模式不是我的强项,但我不知道有任何编码可以有效地表示 é
正如e9
.
它有点像 [UTF-16][1],即 fe ff 00 50 00 6f 00 6b <strong>00 e9</strong> 00 6d 00 6f 00 6e
而且绝对不是 UTF-8,它应该是 50 6f 6b <strong>c3 a9</strong> 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
最佳答案
要么是ISO-8859-1或 Windows-1252 ,后者本质上是前者的超集。使用 new String(bytes, "ISO-8859-1")
或 new String(bytes, "Windows-1252")
。
关于java - 在 Java 中处理错误编码的 UTF-16 (?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282700/