Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

2年前关闭。



Improve this question




经过一定的调查,如果getEncoding中的InputStreamReader不起作用,我发现在Java世界中有一些编码检测项目:
  • juniversalchardet
  • jchardet
  • cpdetector
  • ICU4J

  • 但是,我真的不知道哪个是最好的。有实践经验的人可以告诉我哪个是Java最好的吗?

    最佳答案

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

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

    10-08 00:35