だから私は小さなプログラムを作っています、そしてそれは〜30MBサイズ(解凍された)である圧縮されたXMLデータベースファイルをダウンロードします。私はiPhoneでそのような大きなファイルを使用する方法しかないと理解しているので、NSXMLParserを使用することです。しかし、そのファイルはwindows-1257形式でエンコードされており、NSXMLParserはそのようなファイルを食べません。私に何ができる?iPhoneでファイルエンコーディングを変更したり、NSXMLParserをUTF8でエンコードされた他のファイルで動作させる方法はありますか?
4 に答える
NSXMLParser は、すべてをメモリにロードするため、大きなファイルの処理には適していません。代わりに、ドキュメントを小さなチャンクで解析できる libxml2 に基づいて実装することを検討してください。
これを実装する方法を示す優れた例があります。
libxml2 は、ドキュメントで概説されているように、さまざまなエンコーディングをサポートしてコンパイルできます。ただし、Windows-1257 が iPhone でデフォルトでサポートされているかどうかはテストしていません。
クロース
Windows 1257 で本当に行き詰まっている場合は、自分でマッピングを行ってください。それほど難しいことではありません。このページでは、Windows 1257 コードの Unicode 文字コードについて説明します。 http://msdn.microsoft.com/fr-fr/goglobal/cc305170%28en-us%29.aspx
zip ライブラリをハッキングして、解凍中にエンコード変換を実行することもできます。
テキスト エンコーディングのマントラに従って、データ プロバイダーに XML を UTF-8 形式で提供するよう依頼する必要がある可能性があります。
UTF-8 を使用します。いつも。
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];
しかし、1 つの問題: windows-1257 はNSString が認識しているエンコーディングの 1 つではないようです。そのため、マッピングを自分で行いたくない場合を除き、「プロバイダに UTF-8 を使用するように指示する」ことに戻る可能性があります (yuck )。