Что я обычно делаю при преобразовании данных (строки байтов без кодирования) в строку, так это попытку инициализации строки с использованием различных кодировок. Я бы предложил сначала попробовать наиболее ограничивающие (с точки зрения кодировки) кодировки, такие как 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];