【问题标题】:Encode InputStream response as UTF-8将 InputStream 响应编码为 UTF-8
【发布时间】:2019-05-21 03:51:20
【问题描述】:

我正在尝试与一个 URL 建立连接,该 URL 在网页上以纯文本形式显示一些数据(它是 <pre> 标记之间的一段文本)。每当一个带有特殊字符的字符通过时(例如 é 或 ì),它会显示一个问号而不是字符 a � 被展示。我试过使用this,但这并没有太大变化。我无法每行阅读页面,所以我几乎被困在这里。

这是我的代码:

 try
        {
            // Open the connection 
            NetworkManager networkManager = NetworkManager.getInstance();
            networkManager.addErrorListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent evt)
                {
                    NetworkEvent n = (NetworkEvent) evt;
                    n.getError().printStackTrace();
                    success = false;
                }
            });
            ConnectionRequest request = new ConnectionRequest()
            {               
                {
                    setTimeout(40000);
                }

            @Override
            protected void readResponse(InputStream input) throws IOException
            {
                InputStreamReader inputStreamReader = new InputStreamReader(input, "UTF-8");
                int chr;
                buffer = new StringBuilder();
                //reading the answer                     
                while ((chr = inputStreamReader.read()) != -1)
                {
                    System.out.println("Append the character " + (char) chr);
                    buffer.append((char) chr);
                }
                response = buffer.toString();
                response = response.trim();

                data = new byte[buffer.length()];
                int tmpCounter = buffer.length();
                counter = 0;                    
                while (counter != buffer.length())
                {
                    for (int i = 0; i < tmpCounter; i++)
                    {
                        data[counter + i] = (byte) buffer.charAt(i);
                    }
                    counter += tmpCounter;
                }
                process(data);
                dataEvent.setDataAvailable();
            }

            @Override
            protected void handleException(Exception err)
            {
                success = false;
                dataEvent.setDataAvailable();
            }
        };
        request.setUrl(url);
        request.setPost(false);
        networkManager.addToQueue(request);
    }
    catch (Exception x)
    {
        x.printStackTrace();
    }

【问题讨论】:

  • 这段代码效率很低,尝试用Util.readToString(input, "UTF-8")阅读。我不确定我是否遵循了这个问题,UTF-8 字符在该代码之后是否有效?问题是如何表达的?
  • 我知道代码效率低下,但恐怕此时此刻我没有时间真正提高它的效率。原来我的回复不是 UTF-8,不过感谢您的帮助。
  • 那一行代码会比那个块快得多;-)
  • 是否按字符读取?
  • 不,它作为一个块有效地读取

标签: codenameone


【解决方案1】:

事实证明,实际响应没有使用 UTF-8 响应,这些字符在我的浏览器中只是可读的。我通过指定响应字符应该是 UTF-8 来修复它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 2017-05-18
    • 1970-01-01
    • 2012-05-15
    • 2018-11-15
    • 2015-08-13
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多