2010-03-21 55 views
0

我想使用NSXmlParser来解析ISO-8859-1数据。使用Apple自己的例子来解析ISO-8859-1,我有以下几点。NSString到NSData编码失败

// 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,如果是这样,我做错了什么?

+0

不能NSXMLParser了解它处理''声明的编码吗? – zneak 2010-03-21 04:33:26

+0

我会这样想的。我的XML开头: <?xml version =“1.0”encoding =“ISO-8859-1”?> 而且就像我说的NSString内容正确记录。将它转换为NSData,启动NSXmlParser并转储在didStartElement中找到的内容会在某些区域生成这些Â字符。 – Ternary 2010-03-21 04:46:27

+0

而不是阅读文件到一个NSString,然后将其转换为NSData,它可能简化的事情只是做[NSData dataWithContentsOfFile:xmlFilePath] – 2010-03-21 12:33:47

回答

4

为了防止任何人在这个线程中结束,试图弄清楚如何获得以<?xml version="1.0" encoding="ISO-8859-1"?>正确读取的NSXmlParser开始的XML,以下是我工作的内容。

// 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是我避免了虚假Â字符的唯一途径。