2011-10-03 53 views
3

我想解析Windows-1256「編碼的rss文件,但它沒有被解析器讀取 我做了很多UTF8編碼的解析,但只有這不工作,爲什麼?NSXMLParser解析使用Windows-1256編碼的xml文件

rss file with Windows-1256

解決 解決方案是

NSString *myStr = [[NSString alloc] initWithData:myData encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingWindowsArabic) ]; 
myStr = [myStr stringByReplacingOccurrencesOfString:@"encoding=\"windows-1251\"" withString:@""];   
NSData* aData = [myStr dataUsingEncoding:NSUTF8StringEncoding];  
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:aData]; 
+0

什麼'NSError'被分析器產生的? –

+0

沒有錯誤發生 –

+0

我把斷點放在didendelement委託方法中,它根本不會阻止它們 –

回答

4

謝謝穆罕默德的回答我一直做這個工作了10天,我們沒有發現任何答案都沒有。這是我的代碼:

-(void)parseXMLFileAtURL:(NSString *)URL { 

NSURL *xmlURL = [NSURL URLWithString:URL]; 
NSData * dataXml = [[NSData alloc] initWithContentsOfURL:xmlURL]; 
NSString *myStr = [[NSString alloc] initWithData:dataXml encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingWindowsArabic)]; 

myStr = [myStr stringByReplacingOccurrencesOfString:@"encoding=\"windows-1256\"" withString:@""]; 
NSData *aData = [myStr dataUsingEncoding:NSUTF8StringEncoding]; 

NSXMLParser *rssParser = [[NSXMLParser alloc] initWithData:aData]; 
[dataXml release]; 
[rssParser setDelegate:self]; 
[rssParser setShouldProcessNamespaces:NO]; 
[rssParser setShouldReportNamespacePrefixes:NO]; 
[rssParser setShouldResolveExternalEntities:NO]; 
[rssParser parse]; 
[rssParser setDelegate:nil]; 
[rssParser release]; 

}

0

如果要實現parseErrorOccurred:方法在NSXMLParser代表,它會給你的確切原因錯誤。

喜歡的東西:

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { 
    NSLog(@"NSXMLParser ERROR: %@ - %@", , [parseError localizedDescription], [parseError localizedFailureReason]); 
} 
+0

NSXMLParserUnknownEncodingError = 31是erroe –

+0

嘗試取出編碼線' 「<?XML版本=」 1.0" 編碼=」 windows-1256「?>」'從解析前的XML數據/字符串開始。它可以在不丟失數據的情況下解析文檔。 – chown

+0

是的,它現在解析文件,但拉丁字符是正確的,但阿拉伯字符是錯誤的 –

1

你也可以試試這個:

int length = str.length >100 ? 100:str.length; 
NSString*mystr= [str stringByReplacingOccurrencesOfString:@"encoding=\".*?\"" 
        withString:@"" 
        options:NSRegularExpressionSearch 
        range:NSMakeRange(0, length)];