【问题标题】:Dealing with incorrectly encoded UTF-16 (?) in Java在 Java 中处理错误编码的 UTF-16 (?)
【发布时间】:2012-01-07 03:16:18
【问题描述】:

我正在对 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

【问题讨论】:

    标签: java string utf-8 character-encoding


    【解决方案1】:

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

    【讨论】:

    • @matkelcey:不客气!我不得不说,看到一个称职的程序员看到非 Unicode 输入并且根本不知道它可能是什么,这让我很高兴。不久前,Unicode 是例外而不是规则。
    猜你喜欢
    • 2019-08-16
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2016-03-14
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多