iOS utf-8编码问题
我尝试使用UTF-8字符集获取html页面iOS utf-8编码问题,ios,encoding,utf-8,Ios,Encoding,Utf 8,我尝试使用UTF-8字符集获取html页面 NSString *html=[NSString stringWithContentsOfURL:[NSURL URLWithString: @"http://forums.drom.ru/general/t1151288178.html"] encoding:NSUTF8StringEncoding error:&error]); 但是NSLog(@“%@”,html)返回null 为什么会发生这种情况?问题在于,虽然文件的meta标记声
NSString *html=[NSString stringWithContentsOfURL:[NSURL URLWithString: @"http://forums.drom.ru/general/t1151288178.html"] encoding:NSUTF8StringEncoding error:&error]);
但是NSLog(@“%@”,html)
返回null
为什么会发生这种情况?问题在于,虽然文件的meta标记声称是UTF8,但事实并非如此(至少不是完全如此)。您可以通过以下方式确认这一点:
- 下载html(如
,成功):NSData
- 从终端命令行运行
,它将报告错误(包括行号和字符号): 不幸的是,在这种情况下,即使这样也会失败(可能是因为文件声称是UTF8,但不是)iconv
然后问题变成了“好吧,那我现在该怎么办?”。这取决于你为什么要在你的应用程序中下载HTML。如果确实需要将其转换为UTF8(即去掉非UTF8字符),理论上可以得到GNU
,它是iconv(3)
的一部分。这可能会识别出您可能会删除的不一致字符。这是一个你愿意做多少工作来处理这个不一致的网页的问题。问题是,虽然文件的元标记声称是UTF8,但它不是(至少不是完全)。您可以通过以下方式确认这一点:libiconv
- 下载html(如
,成功):NSData
- 从终端命令行运行
,它将报告错误(包括行号和字符号): 不幸的是,在这种情况下,即使这样也会失败(可能是因为文件声称是UTF8,但不是)iconv
然后问题变成了“好吧,那我现在该怎么办?”。这取决于你为什么要在你的应用程序中下载HTML。如果确实需要将其转换为UTF8(即去掉非UTF8字符),理论上可以得到GNU
,它是iconv(3)
的一部分。这可能会识别出您可能会删除的不一致字符。这是一个你愿意做多少工作来处理这个不一致的网页的问题。我想知道你的俄语网站是否真的编码为UTF8。。。您尝试过其他编码选项吗?我想请求可能是timedout,您可以使用NSURLRequest或其他HTTP框架来获取内容。使用其他编码选项对我没有帮助。Rob是对的,页面在Smart_cut_模式变量中包含不正确的UTF8字符。我用于从NSData中删除这些字符。我想知道你的俄语站点是否真的编码为UTF8。。。您尝试过其他编码选项吗?我想请求可能是timedout,您可以使用NSURLRequest或其他HTTP框架来获取内容。使用其他编码选项对我没有帮助。Rob是对的,页面在Smart_cut_模式变量中包含不正确的UTF8字符。我用于从NSData中删除此字符。libiconv
iconv -f UTF-8 test.html > /dev/nullNSError *error = nil; NSURL *url = [NSURL URLWithString:@"http://forums.drom.ru/general/t1151288178.html"]; NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error]; NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *filename = [docsPath stringByAppendingPathComponent:@"test.html"]; [data writeToFile:filename atomically:YES];
NSStringEncoding encoding; NSString *html = [NSString stringWithContentsOfURL:url usedEncoding:&encoding error:&error];
- 下载html(如