NSString
的{{1}}方法会自动检测正确的字符串编码,以解码指定网址中的数据。但是,此方法是同步的,我尝试使用initWithContentsOfURL:usedEncoding:error:
异步执行相同的任务。
我遇到的问题是,当我从网址获取NSURLConnection
时,没有方法可以在不知道编码的情况下轻松地将该数据转换为NSData
。当我拉入HTML文档时,URL可能是互联网上的任何网站,编码将是各种各样的事情。
有没有办法发现编码,基本上完全按照NSString
执行的操作?
答案 0 :(得分:2)
以下是connection:didReceiveResponse:
委托方法的样子:
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSStringEncoding nsEncoding = 0;
NSString *textEncodingName = [response textEncodingName];
if (textEncodingName)
{
CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)textEncodingName);
if (cfEncoding != kCFStringEncodingInvalidId)
{
nsEncoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding);
}
}
if (nsEncoding != 0)
{
// Great, you have your encoding
}
else
{
// You are on your own, you have to apply a heuristic
}
}
另外,我建议你阅读Mike Ash的Friday Q&A 2010-02-19: Character Encodings。
答案 1 :(得分:0)
如果您正在为桌面编程,则可以在Core Services中链接并使用Text Encoding Conversion Manager提供的嗅探器;见TECCreateSniffer()
及附带的功能。
如果您的目标是iOS,则必须异步加载数据,异步写入文件,然后同步使用您提到的NSString
方法,或尝试使用任何启发式方法自行嗅探编码你可以制作或掠夺。