自动NSEncoding检测

时间:2014-10-06 10:06:58

标签: objective-c nsstring nsdata

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

[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:应该是要走的路。关于我做错了什么或如何解决这个问题的任何建议?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您的文本很可能实际上只包含ASCII字符,因此无法区分所使用的编码是UTF-8还是某些拉丁语编码。在这种情况下,你最有可能被告知“它是UTF-8”。

要正确测试,您必须说服服务器使用拉丁语编码发送类似ÄÖÜ的内容。

(如果它不是UTF-8,也很难猜测使用了哪种编码,因为通常许多8位编码都是有效的)。