所以我正在做一个小程序,它下载压缩的XML数据库文件,大小约为30MB(未压缩)。据我所知,在iPhone上处理这么大的文件只有一个办法,那就是使用NSXMLParser。但是这个文件是用windows-1257格式编码的,NSXMLParser不会吃掉这样的文件。我能做什么?有没有办法改变iphone上的文件编码,或者让NSXMLParser支持UTF8编码以外的其他文件?
发布于 2010-04-06 23:00:16
NSXMLParser不擅长处理大文件,因为它将所有文件加载到内存中。相反,您应该考虑将您的实现基于libxml2,它能够解析成小块的文档,从而使其速度更快,内存效率更高。
有一个很好的例子可以说明如何实现这一点:
XMLPerformance example
在编译libxml2时,可以支持documentation中概述的许多不同的编码。然而,我还没有测试iPhone是否默认支持Windows-1257。
克劳斯
发布于 2010-04-06 20:11:08
根据文本编码的口头是道,您可能不得不要求数据提供者以UTF-8格式提供XML:
使用UTF-8。一直都是。
发布于 2010-04-06 20:26:55
NSXMLParser还可以从NSData对象获取输入,因此在某些情况下,您可以使用NSString方法以指定的编码读取文件,并生成UTF8格式的NSData。
类似于:
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",除非你想自己做映射(讨厌)。
https://stackoverflow.com/questions/2584613
复制相似问题