XML解析文本编码问题

时间:2011-05-24 18:35:00

标签: iphone objective-c

我需要解析带有法语口音的XML Feed,例如'é'。 当我解析XML时,我失去了重音......

我的代码出了什么问题......

NSString *url = [NSString stringWithFormat:@"%@",@"my_xml_url"];
NSURL *myURL = [NSURL URLWithString:url];
NSString *myData = [[NSString alloc] initWithContentsOfURL:myURL];
XMLParser *parser = [[XMLParser alloc] init];
[parser parseXMLFile:myData];

当我开始解析.....

- (void)parseXMLFile:(NSString *)data {
    BOOL success;

    //array for the ranking
    rows = [[NSMutableArray alloc] init];
    index = 0;

    self.currentString = [NSMutableString string];
    storingCharacters = NO;
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:[data data UsingEncoding:NSUTF8StringEncoding]];
    [parser setDelegate:self];
    [parser setShouldResolveExternalEntities:YES];
    success = [parser parse];
    self.currentString = nil;

    //release memory
    [parser release];
}

我看不出问题出在哪里......

由于

2 个答案:

答案 0 :(得分:1)

它似乎是stringWithContentsOfURL

的编码问题

尝试:

NSError *lookupError = nil;
NSString *myData = [NSString stringWithContentsOfURL:myUrl
encoding:NSUTF8StringEncoding error:&lookupError];

答案 1 :(得分:0)

您首先阅读XML数据并将其转换为NSString,然后将该字符串转换回数据。正如krtrego所说,to-string转换可能选择了错误的编码。相反,您应该将来自URL的原始数据直接提供给NSXMLParser,NSXMLParser能够更准确地解释正确的编码(即使用XML文件顶部的元数据)。

所以改为使用

NSData* myData = [[NSData dataWithContentsOfURL: url options: 0 error: &error];

然后在初始化NSXMLParser时传递该数据。