web-dev-qa-db-ja.com

XDocumentを使用してUTF 16エンコーディングでXMLをロードする

XDocumentメソッドを使用してxmlドキュメントを読み取ろうとしています。しかし、XMLが持っているときにエラーが発生しています

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

エンコードを手動で削除すると、完全に機能します。

エラーが発生しています。「Unicodeバイトオーダーマークがありません。Unicodeに切り替えることはできません。

検索してみましたが、ここに着きました->

XMLヘッダーが含まれているときにC#XmlDocument.LoadXml(string)が失敗するのはなぜですか?

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

私のコード:

XDocument xdoc = XDocument.Load(path);

助言がありますか ??

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

39

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

ファイルが適切にエンコードされていることを確認できない場合は、ファイルをストリームに読み込んで(StreamReaderにエンコードを検出させる)、XDocumentを作成できます。

using (StreamReader sr = new StreamReader(path, true))
{
    XDocument xdoc = XDocument.Load(sr);
}
59
Randy Levy

私は試しましたが、別の方法を見つけました!!

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

このコード:

System.IO.File.ReadAllLines(path)

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

System.IO.File.ReadAllText(path)
6