首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSXmlParser解析ISO-8859-1

使用NSXmlParser解析ISO-8859-1
EN

Stack Overflow用户
提问于 2010-03-21 08:22:45
回答 2查看 2.4K关注 0票数 3

我正在使用nsxmlparser,我想知道如何才能正确地将ISO-8859-1解析为NSString。

目前,我得到的结果是两个字节的字符。

我使用的XML (不是我创建的)以<?xml version="1.0" encoding="ISO-8859-1"?>开头

下面是我正在使用的基本调用(省略了NSThread调用)。

代码语言:javascript
复制
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];
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-21 08:35:09

XML specification 建议在prolog文档中使用显式 。您的输入文档可能有一个;它将告诉您解析器解释字符输入时必须使用的编码。

在没有显式声明的情况下,同一节说to 将输入视为UTF-8或UTF-16 (如果文档没有按照这两种格式编码,那么文档就是错误的)。

因此,如果您的解析器忽略了显式编码声明,或者在没有显式声明的情况下使用了错误的编码,那么您的解析器做的就是错误的™,需要对其进行修复以符合XML规范。

票数 3
EN

Stack Overflow用户

发布于 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解析器(非常适合于想法,但不适合您的情况)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2485308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档