NSString к NSData, Сбой в кодировании - PullRequest
0 голосов
/ 21 марта 2010

Я пытаюсь использовать NSXmlParser для анализа данных ISO-8859-1. Используя собственный пример Apple для разбора ISO-8859-1, у меня есть следующее.

// 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);

Я вижу, что в консоли содержимое строки является точным.

Однако, когда я пытаюсь преобразовать его в объект NSData (для использования с анализатором), я делаю следующее.

NSData *xmlData = [xmlFileContents dataUsingEncoding:NSUTF8StringEncoding];

Но потом, когда вызывается мой делегат didStartElement, я вижу Â, который, как мне кажется, связан с расхождением в кодировке.

Может ли NSXmlParser обрабатывать ISO-8859-1 и, если да, что я делаю не так?

1 Ответ

4 голосов
/ 22 марта 2010

На тот случай, если кто-то еще окажется в этом потоке, пытаясь выяснить, как, черт возьми, получить XML, который начинается с <?xml version="1.0" encoding="ISO-8859-1"?>, правильно прочитанного NSXmlParser, вот что я получил.

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

Чтение в содержимом XML как NSUTF8StringEncoding, а затем в NSData как NSUTF8StringEncoding было единственным способом избежать ложных символов Â.

...