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

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

丘华翰
2023-03-14
问题内容

因此,我已经处理这个问题已有一个多月了,并且我还在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;

    }

谢谢。


问题答案:

要使用给定的编码从字节流中读取字符,请使用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;
    }

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



 类似资料:
  • 输入新的指令 之前已经说过,脚本是以行为单位,顺序往下执行的。 也就是说,假如填写了“显示背景”,之后下一行“显示人物”,接着继续“显示对话框”、“显示对话”,按照这样的顺序,就可以做出“人物在场景里出现并说话”的效果。 接下来就来实际试试吧。 首先关掉刚刚的记事本,重新在脚本编辑器里打开“prelogue.ks”这个文件,进入脚本的图形化编辑界面。 然后点击选中第6行,也就是“(到达文件末端)”

  • 我正在制作一个界面来编辑游戏场景。基本上,它由具有嵌套条件和操作的事件组成。所以,我计划使用两个树视图-一个用于选择事件,另一个用于选择事件内的条件/操作进行编辑。 现在,你看,如果我选择一个事件(在左树状视图中),然后尝试在右树状视图中选择某个内容,左树状视图将停止显示蓝色选择矩形。这显然很糟糕,因为现在用户不知道他正在编辑哪个事件! 我发现保留关于当前选择内容的某种信息的唯一方法是使用Ssel

  • 我使用fiddler监控一个简单的html内容从一个PHP文件运行在localhost。但是每当我按f5刷新页面(浏览器)时,在fiddler中有时整个web会话的字体变成蓝色,即当它实际显示内容(html)时,相反的情况发生在web会话是灰色的时候,它不显示html内容。 注意:始终显示请求/响应标题,这仅用于内容。我还尝试了点技巧(“:80”)并从localhost切换到127.0。0.1.

  • 我能够输出最高的值,但我似乎不能让它工作时,我这样做。getnames,因为它显示我一个错误 错误是我似乎不能显示关联名称的最高值它只显示余额

  • 问题内容: Reader和InputStream有什么区别?什么时候使用什么?如果我可以使用Reader读取字符,为什么要使用inputstream,我想读取对象吗? 问题答案: InputStream是从资源获取信息的原始方法。它不执行任何类型的转换就逐字节地获取数据。如果您正在读取图像数据或任何二进制文件,则这是要使用的流。 阅读器是为字符流设计的。如果您正在阅读的信息全部是文本,则阅读器将为

  • 问题内容: 我有一些来自json文件的文本。在本文中,我应用了UTF8编码,但是该编码器无法识别非标准字符,并且为大写字符,是否有一种方法可以净化我的字符串? 我的功能: 问题答案: 我找到了解决方案。 UTF8采用8位表ASCII表,而UTF16采用16位ASCII表,解决方案很简单,只需将函数修改为: