Java:如何从inputStream获取编码?

我想从流中获取编码。

但是它总是返回OS编码。

InputStreamReader reader = new InputStreamReader(new FileInputStream("aa.rar"));

System.out.println(reader.getEncoding());

输出:GBK

但是它总是返回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();

输出:空

我怎样才能正确?:(

回答:

让我们恢复情况:

  • InputStream传送字节
  • *阅读器以某种编码传递字符
  • 新的InputStreamReader(inputStream)使用操作系统编码
  • 新的InputStreamReader(inputStream,“ UTF-8”)使用给定的编码(此处为UTF-8)

因此,在阅读之前需要知道编码。您首先使用字符集检测类正确完成了所有操作。

阅读http://code.google.com/p/juniversalchardet/时,它应该处理UTF-8和UTF-16。您可以使用编辑器JEdit来验证编码,并查看是否存在问题。

以上是 Java:如何从inputStream获取编码? 的全部内容, 来源链接: utcz.com/qa/427152.html

回到顶部