我们的应用程序从我们的用户那里接收文件,如果这些文件是我们支持的编码类型(即 UTF-8、Shift-JIS、EUC-JP),则必须验证这些文件,一旦验证了该文件,我们还需要将该文件保存在我们的系统中,并将其编码为元数据。
目前,我们正在使用JCharDet(它是 mozilla 字符检测器的 Java 端口),但有一些 Shift-JIS 字符似乎无法检测为有效的 Shift-JIS 字符。
有什么想法我们还可以使用吗?
ICU4J 的CharsetDetector将为您提供帮助。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
CharsetDetector cd = new CharsetDetector();
cd.setText(bis);
String charsetName = cd.detect().getName();
顺便问一下,什么样的字符导致了错误,又导致了什么样的错误?我认为 ICU4J 会有同样的问题,具体取决于字符和错误。
Apache Tika是一个内容分析工具包,主要用于确定文件类型——与编码方案相反——但它确实返回文本文件类型的内容编码信息。我不知道它的算法是否和 JCharDet 一样先进,但它可能值得一试......