2013-07-24 33 views
2

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

我现在面临的问题是当我将编码硬编码为NSUTF8StringEncoding时,当我将Web服务响应数据转换为String时,实际上会导致问题,因为我的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]; 
+0

那么我知道如何看到urlResponse中的编码头,然后检测正确的编码,但我希望有人可能已经写了这种功能。 –

+1

看看http://stackoverflow.com/questions/5268661/how-to-detect-text-file-encoding-in-objective-c(但它需要你先将数据写入文件)。 –

回答

8

有一个更好的方法。

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

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

而且encodingName可能是零,如果对于所提供的encodingName没有适当的结果为encodingType变量的结果值将是无效的。