我正在开发一个在Android和iOS设备上运行的应用程序。对于这个应用程序,我需要从URL获取XML流。这个XML并不安全,因为有些行,例如:
Révélation
将成为:
Rvlation
当然我知道最好的办法是修复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,通过这样做,我立即得到替换char的id(65533)而不是好的id,并且无法设法替换它。
有什么想法吗?谢谢你的阅读。
答案 0 :(得分:6)
BufferedReader in = new BufferedReader(
new InputStreamReader(myURL.openStream(), "UTF-8"));
InputStreams 用于字节,二进制数据。
读者适用于字符,字符串,文字。
InputStreamReader桥接了这个概念上的差异,说明二进制数据的编码是什么,并且具有编码的可选参数。默认编码是当前平台的编码 - 因此不太便携。