首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSXMLParser + encoding="windows-1257“

NSXMLParser + encoding="windows-1257“
EN

Stack Overflow用户
提问于 2010-04-06 20:04:05
回答 4查看 1.4K关注 0票数 0

所以我正在做一个小程序,它下载压缩的XML数据库文件,大小约为30MB(未压缩)。据我所知,在iPhone上处理这么大的文件只有一个办法,那就是使用NSXMLParser。但是这个文件是用windows-1257格式编码的,NSXMLParser不会吃掉这样的文件。我能做什么?有没有办法改变iphone上的文件编码,或者让NSXMLParser支持UTF8编码以外的其他文件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-06 23:00:16

NSXMLParser不擅长处理大文件,因为它将所有文件加载到内存中。相反,您应该考虑将您的实现基于libxml2,它能够解析成小块的文档,从而使其速度更快,内存效率更高。

有一个很好的例子可以说明如何实现这一点:

XMLPerformance example

在编译libxml2时,可以支持documentation中概述的许多不同的编码。然而,我还没有测试iPhone是否默认支持Windows-1257。

克劳斯

票数 0
EN

Stack Overflow用户

发布于 2010-04-06 20:11:08

根据文本编码的口头是道,您可能不得不要求数据提供者以UTF-8格式提供XML:

使用UTF-8。一直都是。

票数 0
EN

Stack Overflow用户

发布于 2010-04-06 20:26:55

NSXMLParser还可以从NSData对象获取输入,因此在某些情况下,您可以使用NSString方法以指定的编码读取文件,并生成UTF8格式的NSData。

类似于:

代码语言:javascript
复制
NSString *str = [NSString stringWithContentsOfFile:myFilePath 
                 encoding:NSWindowsCP1252StringEncoding error:myError];
NSData *XMLData = [str dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:XMLData];

但是有一个问题: windows-1257似乎不是encodings that NSString knows about之一,所以你可能会回到“告诉提供商使用UTF-8",除非你想自己做映射(讨厌)。

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

https://stackoverflow.com/questions/2584613

复制
相关文章

相似问题

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