Java:如何从inputStream获取编码? [英] Java:How can i get the encoding from inputStream?

查看:871
本文介绍了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());




output:GBK

output:GBK

第二种方法-使用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();




output:null

output:null

我如何获得正确的? :(

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.

阅读 http://code.google.com/p/juniversalchardet/ 它应处理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获取编码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆