Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS utf-8编码问题_Ios_Encoding_Utf 8 - Fatal编程技术网

iOS utf-8编码问题

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标记声

我尝试使用UTF-8字符集获取html页面

NSString *html=[NSString stringWithContentsOfURL:[NSURL URLWithString:  @"http://forums.drom.ru/general/t1151288178.html"] encoding:NSUTF8StringEncoding error:&error]);
但是
NSLog(@“%@”,html)
返回null
为什么会发生这种情况?

问题在于,虽然文件的meta标记声称是UTF8,但事实并非如此(至少不是完全如此)。您可以通过以下方式确认这一点:

  • 下载html(如
    NSData
    ,成功):

  • 从终端命令行运行
    iconv
    ,它将报告错误(包括行号和字符号):

    不幸的是,在这种情况下,即使这样也会失败(可能是因为文件声称是UTF8,但不是)


    然后问题变成了“好吧,那我现在该怎么办?”。这取决于你为什么要在你的应用程序中下载HTML。如果确实需要将其转换为UTF8(即去掉非UTF8字符),理论上可以得到GNU
    iconv(3)
    ,它是
    libiconv
    的一部分。这可能会识别出您可能会删除的不一致字符。这是一个你愿意做多少工作来处理这个不一致的网页的问题。

    问题是,虽然文件的元标记声称是UTF8,但它不是(至少不是完全)。您可以通过以下方式确认这一点:

    • 下载html(如
      NSData
      ,成功):

    • 从终端命令行运行
      iconv
      ,它将报告错误(包括行号和字符号):

      不幸的是,在这种情况下,即使这样也会失败(可能是因为文件声称是UTF8,但不是)


      然后问题变成了“好吧,那我现在该怎么办?”。这取决于你为什么要在你的应用程序中下载HTML。如果确实需要将其转换为UTF8(即去掉非UTF8字符),理论上可以得到GNU
      iconv(3)
      ,它是
      libiconv
      的一部分。这可能会识别出您可能会删除的不一致字符。这是一个你愿意做多少工作来处理这个不一致的网页的问题。

      我想知道你的俄语网站是否真的编码为UTF8。。。您尝试过其他编码选项吗?我想请求可能是timedout,您可以使用NSURLRequest或其他HTTP框架来获取内容。使用其他编码选项对我没有帮助。Rob是对的,页面在Smart_cut_模式变量中包含不正确的UTF8字符。我用于从NSData中删除这些字符。我想知道你的俄语站点是否真的编码为UTF8。。。您尝试过其他编码选项吗?我想请求可能是timedout,您可以使用NSURLRequest或其他HTTP框架来获取内容。使用其他编码选项对我没有帮助。Rob是对的,页面在Smart_cut_模式变量中包含不正确的UTF8字符。我用于从NSData中删除此字符。
      NSError *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];
      
      iconv -f UTF-8 test.html > /dev/null
      NSStringEncoding encoding;
      NSString *html = [NSString stringWithContentsOfURL:url usedEncoding:&encoding error:&error];