Нужно получить XML с сервера, закодированного в windows-1252 для моего приложения iOS
У меня есть приложение для iOS, которое загружает с сервера файл XML, закодированный в Windows 1252.
Я использую следующий код, чтобы сохранить его в папке с документами:
NSString *path = @"http://server/file.xml";
NSURL *URL = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSWindowsCP1252StringEncoding]];
NSData *xmlData = [NSData dataWithContentsOfURL:URL];
if(xmlData == nil) {
// Error - handle appropriately
NSLog(@"ERROR");
}
NSString *applicationDocumentsDir=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *storePath=[applicationDocumentsDir stringByAppendingPathComponent:@"annonces.xml"];
[xmlData writeToFile:storePath atomically:TRUE];
NSLog(@"write xml");
Это не работает, я получаю нулевой ответ, когда пытаюсь прочитать его с парсером. Как я мог сделать это, чтобы получить это правильно. Я не могу изменить кодировку te xml, которая находится на сервере. Если я вручную изменю кодировку XML, у меня будет правильный ответ.
Вот как я передаю строку XML, чтобы проанализировать ее с помощью класса XML Dictionnary:
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *finalPath = [path stringByAppendingPathComponent:@"annonces.xml"];
NSString *string = [[NSString alloc] initWithContentsOfFile:finalPath encoding:NSWindowsCP1252StringEncoding error:NULL];
NSLog(@"string: %@", string);
NSDictionary *items = [NSDictionary dictionaryWithXMLString:string];
NSLog(@"dictionary: %@", items);
1 ответ
Ваша переменная URL содержит URL-адрес местоположения файла XML, который вы хотите загрузить.
Однако вы применяете NSWindowsCP1252StringEncoding к URL, а не к содержимому файла.
Значение xmlData равно nil, поскольку dataWithContentsOfURL: не удается найти файл в месте, указанном вами в URL.
Сначала вам нужно скачать файл, затем, после его загрузки, вы можете быть обеспокоены тем, в какой кодировке он находится и как его анализировать.
То, как вы используете NSWindowsCP1252StringEncoding, не имеет ничего общего с содержимым файла.