1

我正在开发一个在 Android 和 iOS 设备上运行的应用程序。对于这个应用程序,我需要从 URL 获取 XML 流。这个 XML 不是很安全,因为有些行,例如:

启示

会变成 :

调节

当然,我知道最好的办法是修复 XML 生成器脚本。但我只是作为一家公司的开发人员工作,并无权使用它,所以目前我正在尝试用我拥有的东西做我能做的事情。

现在这里是这个话题的原因。当我将这些数据放入 Objective-C 的 NSData 对象时:

NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];

然后尝试读取每个字节:

NSUInteger len = [data length];
Byte *byteData = (Byte*)malloc(len);
memcpy(byteData, [data bytes], len);
for(int i = 0 ; i < len ; i++)
{
    NSLog(@"%d",byteData[i]);
}

它正确显示char的int值,特殊字符与否。然后我只需要处理(unichar)byteData[i]来解决它。

没有 Java 和 Android,我正在尝试做一个基本的 BufferedReader 操作。

URL myURL = new URL(url);
BufferedReader in = new BufferedReader(new InputStreamReader(myURL.openStream()));

然后逐个打印每个 char 的 int:

int i;
while((i = in.read()) != -1) System.out.print(i);

但是对于 Java,通过这样做,我立即得到了替换字符的 id (65533) 而不是好的,并且无法替换它。

任何想法?谢谢你读我。

4

1 回答 1

6
BufferedReader in = new BufferedReader(
        new InputStreamReader(myURL.openStream(), "UTF-8"));
  • InputStreams用于字节、二进制数据。

  • 阅读器用于字符、字符串、文本。

InputStreamReader 弥合了这个概念上的差异,说明二进制数据在哪个编码中,并且有一个用于编码的可选参数。默认编码是当前平台的编码 - 所以不是很便携。

于 2013-03-04T11:32:04.527 回答