小编典典

inputStream和utf 8有时会显示“?” 人物

java

因此,我已经处理这个问题已有一个多月了,并且我还在google以及Google上检查了几乎所有可能的相关解决方案,但找不到任何能够真正解决我问题的方法。我的问题是我正在尝试从网站下载html源,但是在大多数情况下,我得到的是某些文本显示一些“?”
其中的字符,很可能是因为该站点位于希伯来语中。这是我的代码,

    public static InputStream openHttpGetConnection(String url)
            throws Exception {
        InputStream inputStream = null;
        HttpClient httpClient = new DefaultHttpClient();
        HttpResponse httpResponse = httpClient.execute(new HttpGet(url));
        inputStream = httpResponse.getEntity().getContent();
        return inputStream;

    }
    public static String downloadSource(String url) {
        int BUFFER_SIZE = 1024;

        InputStream inputStream = null;
        try {
            inputStream = openHttpGetConnection(url);
        } catch (Exception e) {
            // TODO: handle exception
        }
        int bytesRead;
        String str = "";
        byte[] inpputBuffer = new byte[BUFFER_SIZE];
        try {
            while ((bytesRead = inputStream.read(inpputBuffer)) > 0) {
                String read = new String(inpputBuffer, 0, bytesRead,"UTF-8");
                str +=read;

            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return str;

    }

谢谢。


阅读 213

收藏
2020-11-30

共1个答案

小编典典

要使用给定的编码从字节流中读取字符,请使用Reader。在您的情况下,它将类似于:

    InputStreamReader isr = new InputStreamReader(inpputStream, "UTF-8");
    char[] inputBuffer = new char[BUFFER_SIZE];

    while ((charsRead = isr.read(inputBuffer, 0, BUFFER_SIZE)) > 0) {
        String read = new String(inputBuffer, 0, charsRead);
        str += read;
    }

您可以看到字节将直接作为字符读入—
这是读者的问题,即它是否需要读取一个或两个字节,例如在缓冲区中创建字符。基本上,这是您的方法,但是由于要读入字节而不是在读之后进行解码。

2020-11-30