猜测 Java 中以 byte[] 表示的文本的编码

2023-12-02

给定一个表示某种未知编码(通常是 UTF-8 或 ISO-8859-1,但不一定如此)的文本的字节数组,猜测最可能使用的编码(在 Java 中)的最佳方法是什么?

值得注意:

  • 没有其他可用的元数据。字节数组实际上是唯一可用的输入。
  • 检测算法显然不会100%正确。如果算法在 80% 以上的情况下都是正确的,那就足够了。

使用以下方法解决该问题儒尼沃萨尔沙代,它是 Mozilla 编码检测库的 Java 端口。

public static String guessEncoding(byte[] bytes) {
    String DEFAULT_ENCODING = "UTF-8";
    org.mozilla.universalchardet.UniversalDetector detector =
        new org.mozilla.universalchardet.UniversalDetector(null);
    detector.handleData(bytes, 0, bytes.length);
    detector.dataEnd();
    String encoding = detector.getDetectedCharset();
    detector.reset();
    if (encoding == null) {
        encoding = DEFAULT_ENCODING;
    }
    return encoding;
}

上面的代码已经过测试并且按预期工作。只需添加juniversalchardet-1.0.3.jar到类路径。

我都测试过儒尼沃萨尔沙代 and jchardet。我的总体印象是 juniversalchardet 提供了两个库更好的检测精度和更好的 API。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

猜测 Java 中以 byte[] 表示的文本的编码 的相关文章

随机推荐