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

Win*_*hen 36 java character-encoding

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

  1. juniversalchardet
  2. jchardet
  3. cpdetector
  4. ICU4J

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

yis*_*aiz 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.或者相反.

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


fgl*_*lez 1

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

它比其他应用程序更容易与我们的应用程序集成,并且产生了很好的结果。