我有一个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);
答案 0 :(得分:0)
您的网址变量包含您要下载的XML文件位置的网址。
但是,您将NSWindowsCP1252StringEncoding应用于网址,而不是文件内容。
xmlData为nil,因为dataWithContentsOfURL:无法在您在URL中指定的位置找到该文件。
您需要先下载该文件,然后在下载后再关注它的编码方式和解析方法。
您使用NSWindowsCP1252StringEncoding的方式与文件内容无关。