2010-12-31 3 views
35

XDocumentメソッドを使用してxmlドキュメントを読み取ろうとしています。 しかし、XMLはXDocumentを使用してUTF 16をエンコードしてxmlをロードする

<?xml version="1.0" encoding="utf-16"?> 

を持っているとき、私は完璧に動作manually.Itエンコーディングを取り外すとき、私はエラーを取得しています。

私は "。何のUnicodeのバイト順マークはありませんUnicodeに切り替えることはできません" エラーを取得しています

を私が検索しようと、私はここまで上陸 - >

Why does C# XmlDocument.LoadXml(string) fail when an XML header is included?

しかし、私の問題を解決できませんでした。

マイコード:

XDocument xdoc = XDocument.Load(path); 

任意の提案?

ありがとうございました。

答えて

57

読み込みようとしているファイルがUnicodeとしてエンコードされていないようです。 utf-16と指定されたXMLファイルのエンコーディングを使用してANSIとしてエンコードされたファイルを開こうとすると、動作を複製できます。

あなたは、あなたがストリーム(StreamReaderは、エンコーディングを検出させる)にファイルを読み込んでXDocumentを作成することができ、ファイルが正しくエンコードされていることを確認することができない場合は、次の

using (StreamReader sr = new StreamReader(path, true)) 
{ 
    XDocument xdoc = XDocument.Load(sr); 
} 
+0

私はXMLの出力をHTMLに吐き出しています。上記の解決策は私にとっては役に立たなかった。 XML文書のテキストに著作権シンボル(c)があり、HTMLがブラウザに送信されると常に文字化けします。だから、私はエンコードしようとしました(XMLエンコードされたHTMLエンコードされた文字列)が、そのままHTMLのように出てきます。すなわち&コピー。文字通り&コピーとして出てきます。ブラウザが(c)を表示できるように、期待される©の代わりに。 –

8

私が試しました、それを行う別の方法を見つけた!!

+1

うわー!これは新しく、4.5がリリースされました! (2012年8月15日 - 5日前):)あなたのフレームワークを維持する方法Sangram! –

+0

@ ArvoBowen-あなたが言うことを実際には得られませんでした.. –

+0

XDocument.Parse()メソッドが新しく、ちょうど.Net 4.5フレームワークに導入されたことが分かります。それは、5日前の2012年8月15日にリリースされました。これは単に補完的なものでした。通常、人々はちょうど補完に感謝します。 :P –

4
XDocument xdoc = XDocument.Parse(System.IO.File.ReadAllLines(path)); 

このコード:

System.IO.File.ReadAllLines(path) 

は、文字列の配列を返します。 正しいコードは次のとおりです。

System.IO.File.ReadAllText(path) 
+1

大丈夫です。それはそれを行う別の方法です。 readAllLinesは機能します。 –

+0

それを行うための最良の方法、合併症。ありがとうございました。 –

関連する問題