从NSURLResponse检测NSStringEncoding的功能?

Bha*_*tap 2 iphone http objective-c nsstring nsstringencoding

我只是想知道是否有任何现有的类别或任何类型的函数将从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];
Run Code Online (Sandbox Code Playgroud)

Abc*_*Efg 9

有一个更好的办法.

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

NSString *encodingName = [aURLResponse textEncodingName];
NSStringEncoding encodingType = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encodingName));
Run Code Online (Sandbox Code Playgroud)

encodingName可能是nil,如果没有适当的结果,变量encodingName的结果值encodingType将无效.