【问题标题】:Function to detect the NSStringEncoding from NSURLResponse?从 NSURLResponse 检测 NSStringEncoding 的函数?
【发布时间】:2013-07-24 13:55:21
【问题描述】:

我只是想知道是否有任何现有的类别或任何类型的函数会从 NSURLResponse 对象中返回我的 NSStringEncoding 常量。

我目前面临的问题是,当我将 Web 服务响应数据转换为 String 时,我已将编码硬编码为 NSUTF8StringEncoding,然后它实际上会导致问题,因为我的 Web 服务有时会返回以 UTF8 编码的响应,有时用 ASCII 编码(虽然我不太确定所有编码,但是是的,有时响应中会出现其他语言字符,例如日语、中文等)

所以我的想法是在 NSURLResponse 上有一个类别来检测编码并返回 例如。

 NSURLResponse * response = // NSURLResponse object ( web service response headers )
 NSData * responseData = // NSData object ( web service response data )
 NSStringEncoding encoding = [response stringEncodingUsed];
 NSString * responseText = [[NSString alloc]initWithData:responseData encoding:encoding];

【问题讨论】:

  • 我知道如何查看 urlResponse 中的编码标头,然后检测正确的编码,但我希望有人可能已经编写了这种函数。
  • 看看stackoverflow.com/questions/5268661/…(不过它要求您先将数据写入文件)。

标签: iphone objective-c http nsstring nsstringencoding


【解决方案1】:

有更好的方法。

您可以从 URLResponse 中获取编码名称作为字符串,然后搜索相应的 NSStringEncoding。

NSString *encodingName = [aURLResponse textEncodingName];
NSStringEncoding encodingType = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encodingName));

另外,encodingName 可能为 nil,如果提供的 encodingName 没有合适的结果,encodingType 变量的结果值将无效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多