有没有办法在使用 stringFromContentsOfURL 加载资源时“自动检测”资源的编码?当前(未弃用)方法 ,+ (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
需要 URL 编码。我注意到弄错了确实会对我想做的事情产生影响。有没有办法以某种方式检查并始终正确?(现在我正在使用 UTF8。)
问问题
4487 次
2 回答
4
我会从文档中尝试这个功能
返回通过从给定 URL 读取数据创建的字符串,并通过引用返回用于解释数据的编码。
+ (id)stringWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError **)error
这似乎猜测了编码,然后将其返回给您
于 2011-08-04T21:18:28.317 回答
2
将数据(无编码的字节字符串)转换为字符串时,我通常会尝试使用各种不同的编码来初始化字符串。我建议先尝试最受限制(字符集方面)的编码,如 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];
于 2011-08-05T20:13:19.280 回答