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