我正在使用nsxmlparser,我想知道如何才能正确地将ISO-8859-1解析为NSString。
目前,我得到的结果是两个字节的字符。
我使用的XML (不是我创建的)以<?xml version="1.0" encoding="ISO-8859-1"?>开头
下面是我正在使用的基本调用(省略了NSThread调用)。
NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:sampleFileName ofType:@"xml"];
NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath encoding:NSUTF8StringEncoding error:nil];
NSData *data = [xmlFileContents dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser parse];发布于 2010-03-21 08:35:09
XML specification 建议在prolog文档中使用显式 。您的输入文档可能有一个;它将告诉您解析器解释字符输入时必须使用的编码。
在没有显式声明的情况下,同一节说to 将输入视为UTF-8或UTF-16 (如果文档没有按照这两种格式编码,那么文档就是错误的)。
因此,如果您的解析器忽略了显式编码声明,或者在没有显式声明的情况下使用了错误的编码,那么您的解析器做的就是错误的™,需要对其进行修复以符合XML规范。
发布于 2010-03-23 02:18:46
看起来您的标题认为它是ISO-8859-1,并且从行为(以两个字符而不是一个字符结尾)来看,至少您的部分内容已经是UTF-8了。这看起来像是一个经典的“双重UTF-8编码问题”,已经编码为utf-8的内容又被编码为UTF-8。将报头更改为UTF-8,它可能会开始工作。您可以尝试始终以UTF-8格式运行您的代码,然后按照它所说的那样运行(因为如果不是UTF-8格式,您将得到一个解析器错误)。
最后,请注意,如果XML文件是通过HTTP提供的,则它的编码将被HTTP header覆盖。
不确定它是否适用于您的需求,但我喜欢parsing XML at all costs上的这篇文章。例如,我会指出我也喜欢feedparser (Python),因为它不惜一切代价是最好的XML解析器(非常适合于想法,但不适合您的情况)。
https://stackoverflow.com/questions/2485308
复制相似问题