gpt4 book ai didi

iphone - NSString initWithData 返回 null

转载 作者:太空狗 更新时间:2023-10-30 03:11:10 28 4
gpt4 key购买 nike

我正在通过 NSURLConnection 从网站中提取数据,并将接收到的数据存储在 NSMutableData 的实例中。在 connectionDidFinishLoading 委托(delegate)方法中,通过调用 NSString 的适当方法将数据转换为字符串:

NSString *result = [[NSString alloc] initWithData:data 
encoding:NSUTF8StringEncoding]

结果字符串结果为空。但是,如果我使用 NSASCIIStringEncoding,我确实获得了适当的字符串,尽管 unicode 字符出现了预期的乱码。服务器的 Content-Type header 指定 UTF-8 编码,但我尝试了多个具有类似场景的不同网站,并且字符串转换发生得很好.似乎问题只与给定的网络服务有关,但我不知道为什么。

附带说明一下,从 API 中提取网页和数据是否是一种良好做法,即缓冲数据、转换为字符串并随后处理字符串?

非常感谢!

最佳答案

你说它“绝对是 UTF-8”,但如果没有 Content-Type header ,你就不知道了。 (即使你确实有一个 header 这么说,它仍然可能是错误的。)

我的猜测是您的数据通常是 ASCII,它始终可以正确解析为 UTF-8,但您有时会尝试解析实际以 ISO 8859-1 或 Windows 代码页 1252 编码的数据。此类数据通常主要是 ASCII , 但有些字节超出了 ASCII 定义的 0–127 范围。 UTF-8 期望这些字节在指定的范围序列内形成代码单元序列,但在其他编码中,任何字节,无论其值如何,本身都是一个完整的字符。尝试将非 ASCII 非 UTF-8 数据解释为 UTF-8 几乎总是会得到错误的结果(错误的字符)或根本没有结果(无法解码;解码器返回 nil),因为数据从一开始就没有用 UTF-8 编码。

您应该先尝试 UTF-8,如果失败,请使用 ISO 8859-1。如果您让用户检索任何网页,您应该让他们更改您用于解码数据的编码,以防他们发现它实际上是 8859-9 或代码页 1252 或其他一些 8 位编码。

如果您从特定服务器下载数据,特别是如果您对该服务器上运行的内容有影响,您应该让它提供准确的 Content-Type header 和/或修复导致它的任何错误提供非 UTF-8 格式的文本。

关于iphone - NSString initWithData 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485190/

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