什么是最准确的编码检测器?[已关闭]

2022-09-01 04:00:00

经过一定的调查,我发现在java世界中有一些编码检测项目,如果in不起作用:getEncodingInputStreamReader

  1. juniversalchardet
  2. 杰查德特
  3. cpdetector
  4. 重症监护室4J

但是,我真的不知道哪个是所有人中最好的。任何有实践经验的人都可以告诉我哪一个是Java中最好的吗?


答案 1

我已经在一些CSV文件上检查了juniversalchardet和ICU4J,结果不一致:juniversalchardet有更好的结果:

  • UTF-8:检测到两者。
  • Windows-1255:当它有足够的希伯来字母时检测到juniversalchardet,ICU4J仍然认为它是ISO-8859-1。使用更多的希伯来字母,ICU4J将其检测为ISO-8859-8,这是另一种希伯来语编码(因此文本还可以)。
  • SHIFT_JIS(日语):检测到juniversalchardet,ICU4J认为它是ISO-8859-2。
  • ISO-8859-1:由 ICU4J 检测,不受 juniversalchardet 支持。

因此,人们应该考虑他最有可能必须处理的编码。最后我选择了ICU4J

请注意,ICU4J 仍在维护。

另请注意,您可能希望使用 ICU4J,如果它因为未成功而返回 null,请尝试使用 juniversalchardet。反之亦然。

Apache TikaAutoDetectReader正是这样做的 - 首先尝试使用HtmlEncodingDetector,然后是UniversalEncodingDetector(基于juniversalchardet),然后尝试Icu4jEncodingDetector(基于ICU4J)。


答案 2

我在网上找到了一个答案:

http://fredeaker.blogspot.com/2007/01/character-encoding-detection.html

它在这里说了一些可验证的东西:

字符编码检测器的优势在于其重点是否在统计分析或HTML META和XML前导发现上。如果您正在处理具有 META 的 HTML 文件,请使用 cpdetector。否则,最好的选择是monq.stuff.EncodingDetector或com.sun.syndication.io.XmlReader。

这就是为什么我现在使用cpdetector。我将用它的结果更新帖子。


推荐