2011-12-14 20 views
0

é(e acute)文字を含むXML文書を読んでいます。ドキュメントはUTF-8として保存されており、バイナリファイルリーダー(UTF-8はc3 + a9)であることを確認しました。ただし、処理後、文字は3バイトのジャンパーになります(c3 + 83 + c2)。XmlDocumentはUTF-8の「e-acute」文字を正しく読み込みません

.NETは文字をUTF-16に変換しようとしています(これは私の推測です)。または、文字を1バイト文字と2バイトUTF-8文字に分割しています。

私はこのような文書をロードしています:

XmlDocuments document = new XmlDocuments(); 
document.Load("z:\\source.xml"); 

は、どのように私はこれをロードする必要がありますか?私はUTF-8でエンコードされたストリームを通してこれを読んでいなければなりませんか?


[編集]

私はロードしてる文書がUTF-8としての地位を宣言して言及するのを忘れてしまいました。

<?xml version="1.0" encoding="utf-8"?> 
+0

「処理後」= ??? –

+0

私はまだ問題が何かを把握しようとしています。私の最大の疑惑は、UTF-8をUTF-16や他のエンコーディングの問題として読み込む際に問題になることです。他の文字は5.1 MBのドキュメントで変更されていません。しかし私は確かに分かりません。つまり、「処理後」 - スクリプトの実行が完了した後です。 – Andrew

+1

どのように* *を出力していますか/文字をチェックしていますか? – deceze

答えて

3

éC3 A9としてUTF-8でエンコードされています。これらの2バイトは、Windows-1252コードページ(別名ANSIコードページまたは.NETのEncoding.Default)でéと解釈されます。これらをUTF-8で再エンコードすると、C3 83 C2 A9が得られます。これは、「3バイトジャム」の最初の3バイトに一致します。これは、どこかのコードがWindows-1252バイト - > System.String chars - > UTF-8バイト変換を実行しているようです。

XML宣言(XmlDocument.Loadが「うまくいくはずです」)で明示的に指定されていると、.NETで間違ったエンコーディングが使用されることはありませんでしたので、コードにバグがあると思われます。

どのように正しく読み込まれていないと判断していますか? .NETにロードされると、バイトではなく文字列が表示されるので、正しくない文字列ではなく不正なバイトシーケンスを報告していると私は奇妙に思えます。

+0

あなたは絶対に正しいです。これはとても混乱しますが、XmlDocumentの問題ではなくファイルを取得するプロセス内にある必要があります。ご協力いただきありがとうございます。 – Andrew

関連する問題