views:

552

answers:

1

I'm trying to use NSXmlParser to parse ISO-8859-1 data. Using Apple's own example for parsing ISO-8859-1, I have the following.

// path to xml file
NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:sampleFileName ofType:@"xml"];

// string of xml contents
NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath encoding:NSUTF8StringEncoding error:nil];

NSLog(@"contents: %@", xmlFileContents);

I see that in the console, the contents of the string is accurate.

However when I try to convert it to an NSData object (for use with the parser), I do the following.

NSData *xmlData = [xmlFileContents dataUsingEncoding:NSUTF8StringEncoding];

But then when my didStartElement delegate gets called, I see  showing up which I think is from an encoding discrepancy.

Can NSXmlParser handle ISO-8859-1 and if so, what am I doing wrong?

+1  A: 

Just in case anyone else ends up on this thread trying to figure out how the heck to get XML that starts with <?xml version="1.0" encoding="ISO-8859-1"?> read properly by NSXmlParser, here is what I got working.

// path to xml file
NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:sampleFileName ofType:@"xml"];

// string of xml contents (read in NSUTF8StringEncoding)
NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath encoding:NSUTF8StringEncoding error:nil];

// interpret string of XML contents as ISO-8859-1 (NSISOLatin1StringEncoding)
NSData *xmlData = [xmlFileContents dataUsingEncoding:NSISOLatin1StringEncoding];

// spawn new thread to parse data
[NSThread detachNewThreadSelector:@selector(parseLineData:) toTarget:self withObject:xmlData];

Reading in the XML contents as NSUTF8StringEncoding and then into NSData as NSUTF8StringEncoding was the only way I avoided the spurious  characters.

Travis