2013-05-05 53 views
0

我需要獲取Web上託管的XML文件的內容,並對其進行解析。IOS編碼ISO-8859-9

我決定使用TouchXML進行解析過程。然而,由於它與ISO-8859-9

XML文件的URL編碼的,我不能得到文件的內容:http://rss.haberler.com/mobil/sondakika2.asp?kategori=manset

我已經試過2個不同的技術途徑。

1)獲取URL的內容到的NSString:

NSString *url = @"http://rss.haberler.com/mobil/sondakika2.asp?kategori=manset"; 
NSError *error = nil; 
NSStringEncoding encoding; 
NSString *xmlString = [[NSString alloc] initWithContentsOfURL: [NSURL URLWithString:url] usedEncoding:&encoding error:&error]; 

的xmlString變成空的,錯誤的描述說:

The operation couldn’t be completed. (Cocoa error 261.) 

相反usedEncoding的,我也嘗試過指定的編碼明確,從UTF- 8到NSISOLatin1StringEncoding和NSISOLatin2StringEncoding(不幸的是,我找不到NSISOLatin9StringEncoding)。

2)我也嘗試加載到NSData的XML。

NSError *error = nil; 
NSData *XMLData = nil; 
XMLData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:url] options:0 error:&error]; 

當我構建XML解析器時,特定字符是未知的,當我得到字符串值時應用程序終止。

CXMLDocument *doc = [[CXMLDocument alloc] initWithData:XMLData options:0 error:nil]; 
NSArray *nodes = [doc nodesForXPath:@"//item" error:nil]; 
for (CXMLElement *node in nodes) { 
    for(int counter = 0; counter < [xmlElement childCount]; counter++) { 
     CXMLNode * child = [xmlElement childAtIndex:counter]; 
     NSString *childName = child.name; 
     NSString * childValue = [child stringValue]; 
    } 
} 

獲取stringValue的子節點用SIGABRT終止應用程序。

我該如何解決這個問題?

+0

嘗試使用'NSStringEncoding iso88599 = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingISOLatin9);' – rmaddy 2013-05-05 21:15:40

+0

創建合適的NSStringEncoding。然後用正確的字符替換不受支持的字符,但xml解析器仍然出錯。 – SadullahCeran 2013-05-05 21:24:35

回答

1

從TouchXML CXMLDocument.m文件,這是initWithData:看起來像

- (id)initWithData:(NSData *)inData options:(NSUInteger)inOptions error:(NSError **)outError 
{ 
return [self initWithData:inData encoding:NSUTF8StringEncoding options:inOptions error:outError];  
} 

你可以嘗試做的事情是,在這個文件中,有NSASCIIStringEncoding或任何編碼,它使用替代NSUTF8StringEncoding。這可能會解決它。

+0

感謝您的提示。 +1源代碼參考。我以其他方式解決了這個問題。 – SadullahCeran 2013-05-07 12:49:38