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

有没有办法“自动检测”加载使用stringFromContentsOfURL时的资源的编码? 当前(非depracated)方法, + (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error; ,想要一个URL编码。 我注意到,错误的做法对我想做的事情有所帮助。 有没有办法检查这个莫名其妙地总是正确的? (现在我正在使用UTF8。)

我会尝试从文档中的这个function

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

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

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

当我将数据(无编码字节的string)转换为string时,通常会尝试使用各种不同的编码来初始化string。 我会build议先尝试最有限的(字符集明智的)编码,如ASCII和UTF-8,然后尝试UTF-16。 如果这些都不是有效的编码,则应该尝试使用像NSWindowsCP1252StringEncoding这样的后备编码来解码string,该编码几乎总能正常工作。 为了做到这一点,你需要使用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];