iphone开发之XML parser时的编码问题

原创 2011年01月17日 13:25:00

又是一个编码问题,看来编码问题,以及编码之间转换是编程中的一个大问题。就像做翻译一样,你要从不同格式编码进行“翻译”。

在解析XML文件时同样再次遇到了编码问题,iphone开发中的NSXMLParser 解析针对的是UTF-8编码,在处理英文XML网页时,没有遇到任何的问题。但当处理到中文XML时,当执行parser时遇到了问题,无法进行解析。进行一番调试之后,我们发现是由于编码方式引起的。

在英文XML网页中网页源码的开头是:

<!--?xml version="1.0" encoding="UTF-8"?-->

而中文XML网页源码开头是:

<!--?xml version="1.0" encoding="gb2312"?-->

如果我们用[[NSXMLParser alloc] initWithContentsOfURL:url]时,就会因为编码问题而无法正确解析。

那我们怎么来处理呢?想法是先用一个NSData去读取网页信息,然后使用gb2312编码将NSData数据初始化到一个NSString中,再将NSString中的"gb2312"字符串用"UTF-8"代替,再将替换过的NSString初始化赋值到一个新的NSData上,我们再使用[[NSXMLParser] initWithData:nsdata]来进行解析。

 

转换并解析的代码如下:

//urlString 是待解析的XML网页的url地址

//获取网页XML到NSData中

NSData *data = [NSData dataWithContentOfURL:[[NSURL alloc] initWithString: urlString]];

//以gb2312的编码方式将获取的NSData数据转换到string中

NSString *string = [[NSString alloc] initWithData:data encoding:0x80000632];

//替换"gb2312"为"UTF-8"

string = [string stringByReplaceingOccurrenceOfString:@"/"gb2312/"" withString:@"/"UTF-8/""];

//将转换编码并替换后的string以UTF8编码初始化到NSData中

NSData *newData = [string dataUsingEncoding:NSUTF8StringEncoding];

//初始化解析器

xmlParser = [[NSXMLParser alloc] initWithData:newData];

[xmlParser parse];

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iPhone开发重构:从硬编码到模型到规律

经过几个阶段的重构,代码不仅“瘦身”了,而且逻辑更清晰了。通过这样一个从硬编码到模型到规律的过程,大家看到的应该不仅仅是不断改进的代码,而且还会感觉到重构的迭代性和无止境吧!任何的设计和实现都只能是在...
  • lbj05
  • lbj05
  • 2011-04-20 20:04
  • 805

iPhone开发笔记(13)调用GoogleMap API实现地理逆向编码

在iOS 5 中苹果公司取消了地理逆向编码的功能,我的毕业设计要用到这个功能,我查了一下这方面的代码,有两个比较好的开源类库可以实现这个功能,但是到头来还是调用GoogleMap API来实现的。 ...
  • kbawyg
  • kbawyg
  • 2012-06-09 16:13
  • 2288

Iphone开发基础篇(十三)-ObjectC之键/值编码(KVC)

什么是键-值编码? 键-值编码是一个用于间接访问对象属性的机制,使用该机制不需要调用存取方法和变量实例就可访问对象属性。本质上讲,键-值编码定义了您的程序存取方法需要实现的样式及方法签名。 ...

iPhone开发重构:从硬编码到模型到规律

无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是个有效的解决途径。《iPhone开发重构》系列就想总结和...

Objective-C ,ios,iphone开发基础:使用GDataXML解析XML文档,(libxml/tree.h not found 错误解决方案)

使用GDataXML解析XML文档   在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用第三方的库,原因是解析效率更高、使用上更方便   这里主要...

iPhone开发笔记——webservice解析xml

给你一个我做过的案例吧是关于一个webservice的解析的关键市解析xml文件,在苹果底下没有现成的类将xml文件解析成树状的类,自己按照帮助文档的案例推敲吧! #import "QQViewCo...

iPhone开发中的XML解析类库对比

在iPhone开发中,XML的解析有很多选择,仅iOS SDK就提供了NSXMLParser和libxml2两个类库,还有如TBXML、TouchXML、KissXML、TinyXML和GDataXM...

iPhone开发【十九】XML解析之NSXMLParser(使用Web Services查询火车信息)

转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/8246333 作者:张燕广 实现的功能:1)根据火车车次查询火车...

iPhone开发【十九】XML解析之NSXMLParser(使用Web Services查询火车信息)

转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/8246333 作者:张燕广 实现的功能:1)根据火车车次查询火车...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)