2014-10-06 72 views
0

在我的程序上,我收到一个NSData,其中有一个字符串有时用UTF8编码,其他时间用Latin1编码。有没有办法自动检测哪个编码正在被使用? 我试图将它写入文件,因此我可以使用stringWithContentsOfFile:usedEncoding:error:,但它总是以UTF8响应。自动NSEncoding检测

[receivedData writeToFile:path atomically:YES]; 
NSError *error = nil; 
Debug(@"Write returned error: %@", [error localizedDescription]); 
NSStringEncoding enc; 
NSString *content=[NSString stringWithContentsOfFile:path usedEncoding:&enc error:&error]; 

也许我没有正确理解我应该如何处理这个问题,但是从我读过stringWithContentsOfFile:usedEncoding:error:应该要走的路。有什么我在做什么错误或如何处理这个建议?

回答

0

您可以从响应中获取编码。 (例如NSURLResponse,NSHTTPURLResponse ...)

NSStringEncoding stringEncoding = NSUTF8StringEncoding; 
    if (response.textEncodingName) { 
     CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); 
     if (encoding != kCFStringEncodingInvalidId) { 
      stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); 
     } 
    } 
0

这是一个很好的机会,你的文字实际上只包含ASCII字符,所以它无法区分所用的编码是否是UTF-8或拉美的一些编码。在这种情况下,您很可能会被告知“这是UTF-8”。

要正确测试这个,你必须说服服务器使用拉丁编码发送类似于ÄÜÜ的东西。 (如果它不是UTF-8,那么猜测使用哪种编码也很困难,因为通常很多8位编码可能是有效的)。