gpt4 book ai didi

iphone - 由于某些字符,NSData 到 NSString 的转换失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:17:27 24 4
gpt4 key购买 nike

我正在将 NSData 转换为 NSString,这是我使用以下方法作为 url 响应获得的。

NSString *result = [[NSString alloc] initWithData:_Data encoding:NSUTF8StringEncoding];

它工作正常,我已经使用了很长时间,但今天我在一页加载数据(分页)时遇到问题我的结果是 null 字符串。

所以我搜索了SO并从这个链接NSData to NSString converstion problem!找到了一个方法

[NSString stringWithCString:[theData bytes] length:[theData length]];

这很好用。

我的查询,

  1. 该方法已在 iOS 2.0 中弃用。如果我使用它,我将来会遇到任何问题吗?
  2. 我认为这是导致方法失败的文本 enter image description here这是什么?有什么方法可以使用 NSUTF8StringEncoding 对其进行编码?
  3. 我可以使用什么替代编码来对上图中的所有类型的字符进行编码?

最佳答案

为了获取服务器发送的内容类型,您需要检查响应的Content-Type header 。

内容类型的值指定了“MIMI 类型”,例如:

内容类型:文本/纯文本

Content-Type 的值可以额外指定字符编码,例如:

内容类型:文本/纯文本; charset=utf-8

每个 MIME 类型应该定义一个“默认”字符集,在没有指定字符集参数时使用。

对于 text/* 媒体类型,默认字符集是 US-ASCII。(参见 RFC 6657, §3)。

以下代码片段演示了如何安全地编码响应的正文:

    - (NSString*) bodyString {
CFStringEncoding cfEncoding = NSASCIIStringEncoding;
NSString* textEncodingName = self.response.textEncodingName;
if (textEncodingName) {
cfEncoding = CFStringConvertIANACharSetNameToEncoding( (__bridge CFStringRef)(textEncodingName) );
}
if (cfEncoding != kCFStringEncodingInvalidId) {
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding);
return [[NSString alloc] initWithData:self.body encoding:encoding];
}
else {
return [self.body description];
}
}

注意:

body 是一个返回代表响应数据的 NSData 对象的属性。

response 是一个返回 NSHTTPURLResponse 对象的属性。

关于iphone - 由于某些字符,NSData 到 NSString 的转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19313492/

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