要素の 1 つの内部テキストに著作権記号を含む .NET XMLDocument に XML ファイルを読み込んでいます。次に例を示します。
<value>© 1994-2009 All rights reserved.</value>
調べてみると、著作権文字の 16 進値は 0xA9 で、前のバイトの値は 0xC2 です。このファイルは ISO-8859-1 でエンコードされています。
問題は、XMLDocument の内容を新しいファイルに (変更せずに) 保存すると、内部テキストが次のように変更されることです。
<value>? 1994-2009 All rights reserved.</value>
XMLDocument.Save によって出力されるファイルには、元のファイルの 0xC2 0xA9 バイト シーケンスの代わりに 0x3F (ASCII の「?」文字) の値があり、同じ ISO-8859-1 エンコーディングを持つと記述されています。
私の単体テスト環境で問題を再現するコードのチャンクは次のとおりです。
Dim xmldoc As New XmlDocument()
xmldoc.LoadXml("base.xml")
Dim filename As String = Me.GetType().Name & "-" & TestContext.TestName & ".xfdl"
Console.WriteLine("Saving file: " & IO.Path.Combine(TestContext.TestDeploymentDir, filename))
xmldoc.Save(filename)
このノードの内部テキストの適切なエンコーディングを維持するにはどうすればよいですか? これはエンコーディングの問題ですか、それとも別の問題ですか?
また、ジョンが以下で指摘するように、ストリームを使用してエンコーディングを指示しようとしましたが、成功しませんでした。