什么是最准确的编码检测器?

时间:2010-09-21 10:23:08

标签: java character-encoding

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

  1. juniversalchardet
  2. jchardet
  3. cpdetector
  4. ICU4J
  5. 然而,我真的不知道哪一个是最好的。任何有实践经验的人都可以告诉我哪一个是最好的Java?

3 个答案:

答案 0 :(得分:11)

我已在某些 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。或者相反。

AutoDetectReader

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

答案 1 :(得分:4)

我在网上找到了答案:

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

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

  

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

这就是我现在使用 cpdetector 的原因。我会用结果更新帖子。

答案 2 :(得分:1)

我个人在我们的项目中使用了jchardet(juniversalchardet当时不可用)只是为了检查一个流是否是UTF-8。

与我们的应用程序集成比其他应用程序更容易,并取得了很好的效果。