Нужно получить 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, не имеет ничего общего с содержимым файла.

Другие вопросы по тегам