0

所以我正在制作小程序,它下载压缩的 XML 数据库文件,大小约为 30 MB(未压缩)。据我了解,只有在 iPhone 上处理如此大的文件的方法是使用 NSXMLParser。但是该文件是用 windows-1257 格式编码的,并且 NSXMLParser 不会吃掉这样的文件。我能做些什么?有没有办法更改 iphone 上的文件编码或使 NSXMLParser 与其他 UTF8 编码文件一起工作?

4

4 回答 4

0

根据文本编码的准则,您可能必须要求数据提供者提供 UTF-8 格式的 XML:

使用 UTF-8。总是。

于 2010-04-06T12:11:08.187 回答
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 似乎不是NSString 知道的编码之一,所以你可能会回到“告诉提供者使用 UTF-8”,除非你想自己做映射(哎呀)。

于 2010-04-06T12:26:54.857 回答
0

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

有一个很好的例子展示了如何实现这一点:

XML 性能示例

libxml2 可以在支持文档中概述的许多不同编码的情况下进行编译。但是,我尚未测试 iPhone 是否默认支持 Windows-1257。

克劳斯

于 2010-04-06T15:00:16.193 回答
0

如果您真的被 Windows 1257 卡住,请自己进行映射。这并不难。本页告诉您 windows 1257 代码的 unicode 字符代码。 http://msdn.microsoft.com/fr-fr/goglobal/cc305170%28en-us%29.aspx

您甚至可以破解您的 zip 库以在解压缩期间执行编码转换。

于 2010-04-06T15:06:46.147 回答