parser解析中文问题,xml
2013-01-08 18:58
423 查看
又是一个编码问题,看来编码问题,以及编码之间转换是编程中的一个大问题。就像做翻译一样,你要从不同格式编码进行“翻译”。
在解析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];
分享到:
在解析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];
分享到:
相关文章推荐
- Java DOM解析Xml中文乱码问题
- cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)
- boost.property_tree解析xml的帮助类以及中文解析问题的解决(转)
- 用Dom4j解析XML及中文问题(二)
- cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)
- 用Dom4j解析XML及中文问题
- android sax 解析xml中文编码问题
- boost.xml_parser中文字符问题
- Servlet中输出XML解析中文乱码问题解决
- dom4j解析xml遇中文,加载报错问题
- 用Dom4j解析XML及中文问题(三)
- Servlet中输出XML解析中文乱码问题解决
- boost.xml_parser中文字符问题
- XML解析后输出时的中文乱码问题
- boost.property_tree解析xml的帮助类以及中文解析问题的解决
- (转)J2me控制台中文输出乱码问题,XML解析中文乱码问题
- 用Dom4j解析XML及中文问题
- 用Dom4j解析XML及中文问题
- 用Dom4j解析XML及中文问题
- 解决android中XML解析的中文显示问题