java - 为什么 Java 的 BufferedReader 不像 Objective-C 的 NSData?

标签 java objective-c encoding nsdata bufferedreader

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

Révélation

将变成:

R�v�lation

当然 我知道最好的办法是修复 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()));

然后一个一个打印每个字符的整数:

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

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

有什么想法吗?感谢您阅读我。

最佳答案

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

  • Readers 用于字符、字符串、文本。

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

关于java - 为什么 Java 的 BufferedReader 不像 Objective-C 的 NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15200414/

相关文章:

java - 通过 url 设置 session token 的方法

java - 如何知道以浮点格式表示时分数是否会向上舍入(re : java remainder [%] results when using fp's)

javascript - AJAX UTF-8 内容在 ISO-8859 编码页面上正确显示

python - 如何将外来编码字符写入文本文件

java - 根据用户输入点创建折线图

java - 在内存中使用 H2 数据库不会在单元测试中保留对象

ios - NSUserDefault , Alloc init 与标准 Userdefault

ios - UIScrollView 不会滚动显示更多内容

iphone - 子类化 UIToolbar 的正确方法

python - Python编码检测,用不用chardet库?