2011-05-24 89 views
0

我需要解析一個帶有法語口音(如'é')的XML feed。 當我分析我失去了口音的XML ...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]; 
} 

我看不出是哪裏的問題......

感謝

+1

NSXMLParser是基於事件的。你能告訴我們你在哪裏看着琴絃嗎?這將是一種稱爲像parserFoundCharacters:或parserFoundCDATA: – Walter 2011-05-24 18:38:27

+0

IN - (void)parseXMLFile:(NSString *)數據當我做NSLog(@「%@」,data);我看不到口音......在此之前... – Maxime 2011-05-24 18:42:16

回答

1

這似乎是一個編碼問題與stringWithContentsOfURL

嘗試:

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

現在它工作正常! – Maxime 2011-05-24 19:00:52

+0

只要XML數據使用UTF-8進行編碼,這將起作用。但是,你不能保證,所以這有點脆弱。我剛剛發佈的解決方案可以更好地處理不同的文件編碼。 – 2011-05-24 19:03:53

0

你第一次讀取XML數據,並將其轉換爲一個NSString,然後再轉換該字符串回數據。正如krtrego所說,字符串轉換可能會選擇錯誤的編碼。相反,你應該從URL直接進入的NSXMLParser,這是對能夠解釋正確的編碼聰明飼料的原始數據(使用元數據的XML文件的頂部即)

所以改用

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

然後在初始化NSXMLParser時傳遞該數據。