我想从流中获取编码.
第一种方法 - 使用InputStreamReader.
但它总是返回OS编码.
InputStreamReader reader = new InputStreamReader(new FileInputStream("aa.rar"));
System.out.println(reader.getEncoding());
Run Code Online (Sandbox Code Playgroud)
输出: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();
Run Code Online (Sandbox Code Playgroud)
输出:空
我怎样才能做对的?:(
让我们恢复这种情况:
因此,在阅读之前需要知道编码.你首先使用charset检测类做了一切.
阅读http://code.google.com/p/juniversalchardet/它应该处理UTF-8和UTF-16.您可以使用编辑器JEdit来验证编码,并查看是否存在某些问题.
归档时间: |
|
查看次数: |
12562 次 |
最近记录: |