NSXMLParser + encoding =“windows-1257”

时间:2010-04-06 12:04:05

标签: iphone xcode iphone-sdk-3.0 nsxmlparser

所以我正在制作小程序,并下载大小约为30 MB的ziped XML数据库文件(unziped)。据我所知,在iPhone上只有这么大的文件才能使用NSXMLParser。但是该文件是用windows-1257格式编码的,NSXMLParser不会吃那样的文件。我能做什么?有没有办法在iphone上更改文件编码或使NSXMLParser与其他UTF8编码文件一起使用?

4 个答案:

答案 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,它能够以小块的形式解析文档,使其更快,更节省内存。

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

XMLPerformance example

可以编译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库以在解压缩期间执行编码转换。