NSXMLParser анализирует XML-файл, закодированный с помощью Windows-1256 - PullRequest
3 голосов
/ 03 октября 2011

Я хочу разобрать файл rss в кодировке Windows-1256 ", но он не читается парсером я сделал много анализа в кодировке UTF8, но только это не работает, почему?

rss файл с 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];

Ответы [ 3 ]

4 голосов
/ 05 октября 2011

Спасибо, Мохамед, за ответ. Я продолжал над ним работать в течение 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 голос
/ 16 апреля 2012

Также вы можете попробовать это:

int length = str.length >100 ? 100:str.length;
NSString*mystr= [str stringByReplacingOccurrencesOfString:@"encoding=\".*?\"" 
                    withString:@""
                    options:NSRegularExpressionSearch 
                    range:NSMakeRange(0, length)];
0 голосов
/ 03 октября 2011

Если вы внедрите метод parseErrorOccurred: в своем делегате NSXMLParser, он даст вам точную причину ошибок.

Что-то вроде:

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