将InputStream响应编码为UTF-8

时间:2018-12-20 15:44:09

标签: codenameone

我正在尝试连接到一个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();
    }

1 个答案:

答案 0 :(得分:0)

结果表明,实际响应未使用UTF-8响应,这些字符仅在我的浏览器中可读。我通过指定响应字符应为UTF-8来解决了该问题