【发布时间】: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