当前位置: 首页 > 面试题库 >

Java:如何从inputStream获取编码?

盛琪
2023-03-14
问题内容

我想从流中获取编码。

第一种方法-使用InputStreamReader。

但是它总是返回OS编码。

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();

输出:空

我怎样才能正确?:(


问题答案:

让我们恢复情况:

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

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

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



 类似资料:
  • 问题内容: 如何从BufferedImage对象获取InputStream?我尝试了这个,但是ImageIO.createImageInputStream()总是返回NULL 图片缩略图已正确生成,因为我可以成功将 bigImage绘制 到 JPanel 。 谢谢。 问题答案: 如果您尝试将图像保存到文件,请尝试: 如果您只想读取字节,请尝试执行写调用,但将其传递给ByteArrayOutputS

  • 问题内容: 我想从java.io.InputStream读取超时。显然,执行此操作的正确方法是使用java.nio.channels.SelectableChannel和java.nio.channels.Selector。不幸的是,目前尚不清楚如何从InputStream转到SelectableChannel。 InputStream来自非常规来源-http://java.sun.com/pro

  • 问题内容: 我已经创建了可执行的jar文件(使用Eclipse),在jar中包含一组图像(.png)文件。所以我添加了一个源文件夹,其中所有图像都位于项目的文件夹中。代码必须访问这些文件才能使用创建BufferedImage 较早前,为了获得我使用的路径 在执行jar时,它抛出错误 URI不是分层的 所以现在我正在使用 但是如何使ImageIO从Inputstream读取?我试过如下 抛出错误 I

  • 问题内容: 在一个项目上,我通过一个类似于控制台的小窗口运行Java应用程序。由于这里有一个很棒的社区,我设法通过从流程输出数据来解决问题,但是由于没有输入流,我运行的命令行应用程序将不断出错。 基于该线程中最后一个有用的答复,我想我将以类似的方式实现该实现,但是在javadocs中以及整个google和互联网中寻找某个类,该类确实没有发现任何解释方法。 因此,我需要一些链接,示例,教程,示例代码

  • 我使用的是改装版2.0b2。收到响应后,我尝试通过以下方式从响应中获取InputStream: 但是这个应用程序一直在扔: 尽管回复正确。我到底做错了什么?