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