且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

iOS 自动处理 Http 请求的应答内容字符编码

更新时间:2022-08-16 16:46:56

iOS 请求 URL 返回内容的字符集编码处理自适应

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。




我们来看一下如何访问 “web service”,暂时先不考虑安全链接问题。本例中,我想要以稳妥的方式访问我的博客的 RSS 种子。

Lets first look at how to access our “web service” without the security overhead. In this example I want to access the RSS feed of my blog in a secure fashion.


    // our secure service :-)
    NSURL *server = [NSURL URLWithString:@"http://www.cocoanetics.com/feed/"];
    NSURLRequest *request = [NSURLRequest requestWithURL:server];
    
    // use synchronous convenience method
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *returnedData = [NSURLConnection sendSynchronousRequest:request
                                                 returningResponse:&response
                                                             error:&error];
    if (!returnedData)
        {
        NSLog(@"Error retrieving data, %@", [error localizedDescription]);
        return NO;
        }
    
    // get the correct text encoding
    // http://***.com/questions/1409537/nsdata-to-nsstring-converstion-problem
    CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)
                                                                           [response textEncodingName]);
    NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding);
    
    // output
    NSString *xml = [[[NSString alloc] initWithData:returnedData encoding:encoding]
                     autorelease];
    NSLog(@"%@", xml);
}


我们通过这种方式取到了我的站点的 RSS 的 XML 。这里有一个漂亮的技巧,不采用硬编码 UTF8 的方式,我们从应答中获取适当的编码。这是一个好的习惯,你也应该在任何情况下采用它。

We get the xml of my website RSS through this. There is another nifty trick in this, instead of hard coding UTF8 we actually get the appropriate encoding straight from the response. This is a good habbit so you should adopt that in any case.