NSString 到 NSData 编码失败

Posted

技术标签:

【中文标题】NSString 到 NSData 编码失败【英文标题】:NSString to NSData Failing in Encoding 【发布时间】:2010-03-21 04:24:25 【问题描述】:

我正在尝试使用 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,如果可以,我做错了什么?

【问题讨论】:

NSXMLParser 不能从<?xml?> 声明中理解它所处理的编码吗? 我会这么认为。我的 XML 以: 开头,就像我说的 NSString 内容日志正确。将其转换为 NSData、启动 NSXmlParser 并转储在 didStartElement 中找到的内容会在某些区域产生这些 Â 字符。 与其将文件读入 NSString,然后将其转换为 NSData,不如将其简化为 [NSData dataWithContentsOfFile:xmlFilePath] 是的,我最初实际上是在使用 [NSData dataWithContentsOfFile:xmlFilePath] 并注意到 ISO 编码中的虚假字符。然后我做了 NSString 方法只是为了确保它正确地将它读入字符串。 【参考方案1】:

以防万一其他人最终在这个线程上试图弄清楚如何让 NSXmlParser 正确读取以 <?xml version="1.0" encoding="ISO-8859-1"?> 开头的 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];

NSUTF8StringEncoding 读取XML 内容,然后以NSUTF8StringEncoding 读取NSData 是我避免虚假Â 字符的唯一方法。

【讨论】:

以上是关于NSString 到 NSData 编码失败的主要内容,如果未能解决你的问题,请参考以下文章

NSData 从 NSKeyedArchiver 到 NSString

将 UTF-8 编码的 NSData 转换为 NSString

将UTF-8编码的NSData转换为NSString

在不知道编码类型的情况下将 NSData 转换为 NSString

解决NSData转NSString返回nil的问题

如何以编程方式将 NSData 转换为 NSString? [复制]