大佬教程收集整理的这篇文章主要介绍了parser:parseErrorOccurred31#parser:parseErrorOccur,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
//取XML文件的前40个字节 NSData*xmldata=[self.ItemDatasubdataWithRange:NSMakeRange(0,40)]; //以UTF-8编码进行解码 NSString*xmlstr=[[NSStringalloc]initWithData:xmldataencoding:NSUTF8StringEncoding]; //NSLog(@"XMLHEADER:%@",xmlstr); //搜索GB2312,如果找到,就对整个文件进行编码转换 if([xmlstrrangeOfString:@"\"GB2312\""options:NSCaseInsensitiveSearch].location!=NSNotFound) { //NSLog(@"GB2312encodingfounded."); NSStringEncodingenc=CFStringConvertEncodingToNSStringEncoding(kcfStringEncodingGB_18030_2000); NSString*utf8str=[[[NSStringalloc]initWithData:self.ItemDataencoding:enc]autorelease]; utf8str=[utf8strstringByReplacingOccurrencesOfString:@"\"GB2312\""withString:@"\"utf-8\""options:NSCaseInsensitiveSearchrange:NSMakeRange(0,40)]; NSData*newData=[utf8strdataUsingEncoding:NSUTF8StringEncoding]; self.ItemData=newData; }
GB2312或GBK编码的网页,要先用gb编码解码,然后替换其中的gb字符串,再用utf8编码成data给parser就能解析中文网页了。
我读一个 XML 文件从谷歌天气 api 和解析它使用 NSXMLParser。城市问题是巴黎。这是我得到的简短 xml 输出
<?xmlversion="1.0"?> <xml_api_replyversion="1"> <weathermodule_id="0"tab_id="0"mobile_row="0"mobile_zipped="1"row="0"section="0"><forecast_information> <citydata="Paris,Île-de-France"/> <postal_codedata="Paris"/> <latitude_e6data=""/> <longitude_e6data=""/> ... ...
现在我用来削去此 xml 的代码是
NSString*address=@"http://www.google.com/ig/api?weather=Paris"; NSURL*URL=[NSURLURLWithString:address]; NSXMLParser*parser=[[NSXMLParseralloc]initWithContentsOfURL:URL]; [parsersetDelegate:self]; [parserparse]; ... -(void)parser:(NSXMLParser*)parserdidStartElement:(NSString*)elementNamenamespaceURI:(NSString*)namespaceURIqualifiedName:(NSString*)qualifiedNameattributes:(NSDictionary*)attributeDict { NSLog(@"XMLParser1...elementName...%@",elementName); }
这是我获得上述 xml 的输出
XMLParser1...elementName...xml_api_reply XMLParser1...elementName...weather XMLParser1...elementName...forecast_information
问题是它分析的所有标记,直到它到达"城市数据"因为巴黎 î l e de 法国,然后它就会停止的名称中有非 ascii 字符。它不会处理之后像 postal_code 的标签。纬度、 经度等。
所以我的问题是,有什么办法可以从返回的 URL XML 字符串中删除所有非 ascii 字符吗?
还行。我已经解决了此问题。这是怎么弄来的工作。
我首先做的就是用特殊字符的 URL 的 XML。然后我去掉从 XML 字符串的所有特殊字符。然后我将字符串转换为 NSdata 然后把 nsdata 对象传递给我的 NSXMLParser。因为它有没有更多特殊字符 NSXMLParser 是快乐。
这里是为任何人在将来可能会遇到的代码。大感谢您对这篇文章作出了贡献的人 !
NSString*address=@"http://www.google.com/ig/api?weather=Paris"; NSURL*URL=[NSURLURLWithString:address]; NSError*error; NSString*XML=[NSStringstringWithContentsOfURL:URLencoding:NSASCIIStringEncodingerror:&error]; //REMOVEALLNON-ASCIICHARACTERS NSMutableString*asciiCharacters=[NSMutableStringstring]; for(NSIntegeri=32;i<127;i++) { [asciiCharactersappendFormat:@"%c",i]; } NSCharacterSet*nonAsciiCharacterSet=[[NSCharacterSetcharacterSetWithCharactersInString:asciiCharacters]invertedSet]; XML=[[XMLcomponentsSeparatedByCharactersInSet:nonAsciiCharacterSet]componentsJoinedByString:@""]; NSData*data=[XMLdataUsingEncoding:NSUTF8StringEncoding]; NSXMLParser*parser=[[NSXMLParseralloc]initWithData:data]; [parsersetDelegate:self]; [parserparse];
以上是大佬教程为你收集整理的parser:parseErrorOccurred31#parser:parseErrorOccur全部内容,希望文章能够帮你解决parser:parseErrorOccurred31#parser:parseErrorOccur所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。