NSXMLParser解析使用Windows-1256编码的xml文件

3

我希望你能够帮忙翻译一下关于IT技术的内容。需要翻译的内容如下:

我想解析Windows-1256编码的RSS文件,但是解析器无法读取它。我已经使用UTF8编码进行了大量分析,但是只有这个不起作用,为什么呢?

Windows-1256编码的RSS文件

已解决 解决方案是:

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];

解析器会产生什么 NSError - Jonathan Grynspan
我在didEndElement委托方法处设置了断点,但它根本不停止。 - Mohamed DiaaEldin
NSXMLParserErrorDomain代码: 31操作无法完成。 - Mohamed DiaaEldin
我正在编写一款新闻应用程序,是否存在另一个应用程序使用此编码的 RSS?!!! - Mohamed DiaaEldin
根据您现在拥有的信息,在Stack Overflow上搜索实际上已经有了答案。 - Jonathan Grynspan
显示剩余7条评论
3个回答

4

感谢Mohamed的回答。我已经花了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];

}


1
此外,您也可以尝试这个:
int length = str.length >100 ? 100:str.length;
NSString*mystr= [str stringByReplacingOccurrencesOfString:@"encoding=\".*?\"" 
                    withString:@""
                    options:NSRegularExpressionSearch 
                    range:NSMakeRange(0, length)];

0
如果您在NSXMLParser代理中实现了parseErrorOccurred:方法,它将为您提供错误的确切原因。
类似于以下内容:
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
    NSLog(@"NSXMLParser ERROR: %@ - %@", , [parseError localizedDescription], [parseError localizedFailureReason]);
}

NSXMLParserUnknownEncodingError = 31 是错误。 - Mohamed DiaaEldin
在解析之前,尝试从 XML 数据/字符串的开头删除编码行 "<?xml version="1.0" encoding="windows-1256" ?>"。这样可以使文档在不丢失数据的情况下被解析。 - chown
是的,它现在可以解析文件了,但拉丁字符是正确的,但阿拉伯字符是非常错误的。 - Mohamed DiaaEldin
是的,我想可能会发生这样的事情。不确定如何让NSXMLParser正确读取该编码。我会研究一些东西。 - chown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接