我正在对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
答案 0 :(得分:7)
那是ISO-8859-1或Windows-1252,后者本质上是前者的超集。使用new String(bytes, "ISO-8859-1")
或new String(bytes, "Windows-1252")
。