NSXMLParser解析使用Windows-1256编码的xml文件
我想解析Windows-1256“编码的rss文件,但它没有被解析器读取 我做了很多UTF8编码的解析,但只有这不工作,为什么?NSXMLParser解析使用Windows-1256编码的xml文件
解决 解决方案是
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];
谢谢穆罕默德的回答我一直做这个工作了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];
}
如果要实现parseErrorOccurred:
方法在NSXMLParser
代表,它会给你的确切原因错误。
喜欢的东西:
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSLog(@"NSXMLParser ERROR: %@ - %@", , [parseError localizedDescription], [parseError localizedFailureReason]);
}
NSXMLParserUnknownEncodingError = 31是erroe –
尝试取出编码线' “”'从解析前的XML数据/字符串开始。它可以在不丢失数据的情况下解析文档。 – chown
是的,它现在解析文件,但拉丁字符是正确的,但阿拉伯字符是错误的 –
你也可以试试这个:
int length = str.length >100 ? 100:str.length;
NSString*mystr= [str stringByReplacingOccurrencesOfString:@"encoding=\".*?\""
withString:@""
options:NSRegularExpressionSearch
range:NSMakeRange(0, length)];
什么'NSError'被分析器产生的? –
没有错误发生 –
我把断点放在didendelement委托方法中,它根本不会阻止它们 –