经过一番调查,我发现java世界中有一些编码检测项目,如果InputStreamReader
中的getEncoding
不起作用:
但是,我真的不知道哪个是最好的。有实践经验的大神能告诉我哪一个是 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。或者相反。
AutoDetectReader的 Apache Tika正是这样做的——首先尝试使用 HtmlEncodingDetector,然后是 UniversalEncodingDetector(基于 juniversalchardet),然后尝试 Icu4jEncodingDetector(基于 ICU4J)。
关于java - 什么是最准确的编码检测器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3759356/