所以我正在制作小程序,并下载大小约为30 MB的ziped XML数据库文件(unziped)。据我所知,在iPhone上只有这么大的文件才能使用NSXMLParser。但是该文件是用windows-1257格式编码的,NSXMLParser不会吃那样的文件。我能做什么?有没有办法在iphone上更改文件编码或使NSXMLParser与其他UTF8编码文件一起使用?
答案 0 :(得分:0)
根据文本编码的咒语,你必须要求数据提供商提供UTF-8格式的XML:
使用UTF-8。总是
答案 1 :(得分:0)
NSXMLParser也可以从NSData对象获取输入,因此在某些情况下,您可以使用NSString方法以指定的编码读取文件并生成UTF-8的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”,除非你想做映射你自己(哎呀)。
答案 2 :(得分:0)
NSXMLParser不擅长处理大文件,因为它会在内存中加载所有文件。相反,您应该考虑将您的实现基于libxml2,它能够以小块的形式解析文档,使其更快,更节省内存。
有一个很好的例子可以说明如何实现这个:
可以编译libxml2,支持许多不同的编码,如documentation中所述。但是我没有测试iPhone上默认是否支持Windows-1257。
克劳斯
答案 3 :(得分:0)
如果您真的被Windows 1257困住,请自行进行映射。这并不难。 此页面告诉您Windows 1257代码的unicode字符代码。 http://msdn.microsoft.com/fr-fr/goglobal/cc305170%28en-us%29.aspx
您甚至可以破解您的zip库以在解压缩期间执行编码转换。