我试图从服务器读取使用套接字的响应,并且信息是UTF-8编码的。我将InputStream从InputStreamReader中的套接字中编码设置为“UTF-8”。BlackBerry Socket UTF-8 InputStreamReader问题
出于某种原因,似乎只有部分响应被读取,然后读数只会持续一两分钟,然后结束。如果我将InputStreamReader上的编码设置为“ISO-8859-1”,那么我可以立即读取所有数据,但显然不是所有字符都能正确显示。
代码看起来像下面
socketConn = (SocketConnection)Connector.open(url);
InputStreamReader is = new InputStreamReader(socketConn.openInputStream(), "UTF-8");
然后我在标题和内容阅读。内容被分块,我读取每个块的大小(从十六进制转换为十进制)的行,知道要读多少。
我不理解两种编码在阅读上的差异及其可能产生的效果,因为它在ISO-8859-1没有问题的情况下工作,并且它最终以UTF-8工作,只有很长的延迟。
一般来说,像这样解码部分UTF-8流可能会导致错误。由于每个UTF-8字符可能由多个字节组成,因此在对其任意大小的块进行解码时,最终可能会在一个块的末尾出现一个角色的第一部分,而在下一个块的开始处则会出现该角色的其余部分,在两个组块上给出错误的解码结果。在你的具体情况下,你知道每个块的大小,他们保证正确解码,所以这应该工作得很好。嗯,是的...我希望这是有道理:) – Martin
这是有道理的!谢谢,这是我可能需要注意的一个角落案例。 – mparizeau