2011-10-03 56 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)];