如何检测文件的字符编码?

4
我们的应用程序接收来自用户的文件,这些文件必须经过验证,以确定它们是否是我们支持的编码类型(即UTF-8、Shift-JIS、EUC-JP)。一旦该文件得到验证,我们还需要将其保存在系统中,并将其编码作为元数据。
目前,我们正在使用JCharDet(这是mozilla字符检测器的java端口),但有一些Shift-JIS字符似乎无法被识别为有效的Shift-JIS字符。
您有什么其他想法吗?

1
可能是重复的问题:Java:如何确定流的正确字符集编码 - Fabian Steeg
应用程序如何接收文件?如果是通过HTTP协议传输,这些信息应该存储在MIME头中。 - Peter DeWeese
@Peter:不,当然不是。MIME头部仅代表HTTP请求正文的编码,而不是文件的原始编码。 - BalusC
2个回答

2

ICU4J的字符集检测器会对您有所帮助。

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
CharsetDetector cd = new CharsetDetector();
cd.setText(bis);
String charsetName = cd.detect().getName();

顺便问一下,是什么样的字符导致了错误,又是什么样的错误导致的呢?我认为 ICU4J 也会有同样的问题,这取决于字符和错误类型。

1

Apache Tika 是一个内容分析工具包,主要用于确定文件类型(而不是编码方案),但它确实返回文本文件类型的内容编码信息。我不知道它的算法是否像 JCharDet 一样先进,但值得一试...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接