2012-02-08 8 views
0

名前、年齢などのユーザー情報が含まれているxmlファイルを解析していますが、ユーザーは世界中から来ており、xmlには別のchar-setが必要です。たとえば、「Sikl¢si」という名前のユーザーが存在します。私がUTF-8をエンコードするxmlを設定した場合、c#xmldocumentオブジェクトはxmlのロード時に例外をスローします。エンコーディングをiso-8859-9に変更しました。現在は動作しています。しかし、iso-8859-9でカバーされていない別の面白い文字があれば、もう問題になります。この問題の究極の解決策は何か。多国語ソリューション用のXmlエンコード

答えて

-1

大部分をカバーするUTF-32にしてください。 UTFの詳細についてはthisをご覧ください。

+0

いいえ、動作していません。 XmlDocumentはUTF-32を知りません。ルートレベルでエラーメッセージが表示されます。ルートレベルのデータが無効です。 Line 1、position 40 – londondev

+1

UTF-32は可能なすべての文字をカバーしますが、UTF-16とUTF-8も同様です。 UTF-32が動作し、UTF-8が動作しない理由はありません。 – svick

3

究極の解決策は、最初にファイルをエンコードするために使用されたエンコーディングを知ることです。 XMLファイルでは、XML宣言で使用しているエンコーディングを指定する必要があります(例:<?xml charset="UTF-8" ?>)。そうでない場合、ドキュメントはUTF-8またはUTF-16でなければなりません(また、それらの違いは自動的に検出されます)。

XMLパーサは、XMLファイルの情報に基づいて透過的にエンコーディングを処理する必要があります。

構文解析されないドキュメントを受け取っている場合、最初の場所で問題が発生している可能性があります。あなたはそれらを拒否し、提出されたエンコーディングを修正するように指示する必要があります

(すべてのUnicodeエンコーディングは、あなたが必要とする可能性の高い文字だけでなく、膨大な数の文字を扱うことができます)問題は、ドキュメントがUTF-8ではなく、UTF -8は使用されている文字を処理できません)。

+0

実際には、データベースからXMLファイルを生成しています。そのため、ユーザーに必要な文字セットに関する情報はありません。私は何をすべきかわかりません。 – londondev

+1

データベース内のすべてのデータをUTF-8に変換し、それを変更するすべてのものがUTF-8に固執していることを確認してください。あなたはおそらく、現在の壊れた状態から回復しようとするときに、手動で多くのチェックを行う必要があります。 – Quentin

関連する問題