第一种方法 - 使用InputStreamReader。
但它总是返回操作系统编码。
InputStreamReader reader = new InputStreamReader(new FileInputStream("aa.rar"));
System.out.println(reader.getEncoding());
输出:GBK
第二方法 - 使用UniversalDetector会。
但它总是返回null。
FileInputStream input = new FileInputStream("aa.rar");
UniversalDetector detector = new UniversalDetector(null);
byte[] buf = new byte[4096];
int nread;
while ((nread = input.read(buf)) > 0 && !detector.isDone()) {
detector.handleData(buf, 0, nread);
}
// (3)
detector.dataEnd();
// (4)
String encoding = detector.getDetectedCharset();
if (encoding != null) {
System.out.println("Detected encoding = " + encoding);
} else {
System.out.println("No encoding detected.");
}
// (5)
detector.reset();
输出:空
我怎样才能得到正确的? :(
+4
InputStreamReader将始终使用平台编码。它不会尝试检测文件中的编码。 通过UniversalDetector运行什么类型的文件?在你的例子中,你使用了一个RAR文件,它是一个压缩的二进制格式。首先尝试使用简单的ASCII文本文件。 –
+0
嗨,我改变了文件类型,'Fortunes.txt'输出:没有检测到编码 –
+0
似乎没有检测到'标准'UTF-8或UTF-16没有BOM,但它的工作原理是UTF-16为我提供BOM。也许考虑使用不同的库进行字符集检测? [此链接](http://stackoverflow.com/questions/499010/java-how-to-determine-the-correct-charset-encoding-of-a-stream)可能会有所帮助。 –