在我的程序中,我收到的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:
应该是要走的路。关于我做错了什么或如何解决这个问题的任何建议?
答案 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位编码都是有效的)。