本文介绍了Java:如何从inputStream获取编码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想从流中获取编码。
第一种方法-使用InputStreamReader。
1st method - to use the InputStreamReader.
但是它总是返回OS编码。
But it always return OS encode.
InputStreamReader reader = new InputStreamReader(new FileInputStream("aa.rar"));
System.out.println(reader.getEncoding());
第二种方法-使用UniversalDetector。
2nd method - to use the UniversalDetector.
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();
我如何获得正确的? :(
How can I get the right? :(
推荐答案
让我们恢复情况:
- InputStream提供字节
- *阅读器以某种编码提供字符
- 新的InputStreamReader(inputStream)使用操作系统编码
- 新的InputStreamReader(inputStream, UTF-8)使用给定的编码(此处为UTF-8)
- InputStream delivers bytes
- *Readers deliver chars in some encoding
- new InputStreamReader(inputStream) uses the operating system encoding
- new InputStreamReader(inputStream, "UTF-8") uses the given encoding (here UTF-8)
因此,在阅读之前,您需要先了解编码。您首先使用字符集检测类对所有内容进行了正确的操作。
So one needs to know the encoding before reading. You did everything right using first a charset detecting class.
阅读它应处理UTF-8和UTF-16。
您可以使用编辑器JEdit验证编码,并查看是否存在问题。
Reading http://code.google.com/p/juniversalchardet/ it should handle UTF-8 and UTF-16.You might use the editor JEdit to verify the encoding, and see whether there is some problem.
这篇关于Java:如何从inputStream获取编码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!