需要从我在iOS应用程序的windows-1252中编码的服务器获取XML

时间:2014-04-09 16:00:48

标签: ios xml windows-1252

我有一个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");

它不起作用,当我尝试用解析器读取它时,我得到了一个零响应。我怎么能正确地做到这一点。我无法更改服务器上的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 个答案:

答案 0 :(得分:0)

您的网址变量包含您要下载的XML文件位置的网址。

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

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

您需要先下载该文件,然后在下载后再关注它的编码方式和解析方法。

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