0

我有一个 iOS 应用程序,它从服务器下载一个在 Windows 1252 中编码的 XML 文件。

我正在使用以下代码将其保存到我的文档文件夹中:

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");

它不起作用,当我尝试使用解析器读取它时,我得到了一个 nil 响应。我该怎么做才能正确获得它。我无法更改服务器上 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);
4

1 回答 1

0

您的 URL 变量包含您要下载的 XML 文件所在位置的 url 地址。

但是,您将 NSWindowsCP1252StringEncoding 应用于 url,而不是文件的内容。

xmlData 为 nil,因为 dataWithContentsOfURL: 在 URL 中指定的位置找不到文件。

您需要先下载文件,然后一旦下载,您就可以关心它的编码以及如何解析它。

您使用 NSWindowsCP1252StringEncoding 的方式与文件的内容无关。

于 2014-04-09T19:25:23.980 回答