有没有办法在使用stringFromContentsOfURL加载资源时“自动检测”资源的编码?

时间:2011-08-04 20:53:54

标签: objective-c ios nsstring nsstringencoding

使用stringFromContentsOfURL加载资源时,有没有办法“自动检测”资源的编码?当前(非删除)方法+ (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;需要URL编码。我注意到,错误的确会对我想做的事情产生影响。有没有办法以某种方式检查这个并始终正确? (现在我正在使用UTF8。)

2 个答案:

答案 0 :(得分:4)

我会从文档中尝试这个功能

返回通过读取给定URL中的数据而创建的字符串,并通过引用返回用于解释数据的编码。

+ (id)stringWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError **)error

这似乎猜测编码然后将其返回给你

答案 1 :(得分:2)

将数据(无编码字符串)转换为字符串时,我通常会尝试使用各种不同的编码初始化字符串。我建议首先尝试最大限度(charset wise)编码,如ASCII和UTF-8,然后尝试UTF-16。如果这些都不是有效的编码,您应该尝试使用像NSWindowsCP1252StringEncoding这样几乎总是有效的后备编码来解码字符串。为此,您需要使用NSData下载页面内容,这样您就不必为每次编码尝试重新下载。您的代码可能如下所示:

NSData * urlData = [NSData dataWithContentsOfURL:aURL];
NSString * theString = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding];
if (!theString) {
    theString = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
}
if (!theString) {
    theString = [[NSString alloc] initWithData:urlData encoding:NSUTF16StringEncoding];
}
if (!theString) {
    theString = [[NSString alloc] initWithData:urlData NSWindowsCP1252StringEncoding];
}
// ...
// use theString here...
// ...
[theString release];