gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:09:41 26 4
gpt4 key购买 nike

我正在开发一个在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com