我正在将XML文件读入.NET XMLDocument,其中包含其中一个元素的内部文本中的版权符号。这是一个例子:
<value>© 1994-2009 All rights reserved.</value>
检查时,版权字符的十六进制值为0xA9,前一个字节的值为0xC2。该文件采用ISO-8859-1编码。
问题在于,当我将XMLDocument的内容保存到新文件(没有任何修改)时,内部文本被修改为以下内容:
<value>? 1994-2009 All rights reserved.</value>
XMLDocument.Save输出的文件的值为0x3F(ASCII的'?'字符)代替原始文件中的0xC2 0xA9字节序列,并表示具有相同的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)
如何保留此节点内部文本的正确编码?这是编码问题还是其他问题?
另外,我尝试使用流来指示编码,例如John在下面指出但没有成功。
答案 0 :(得分:-1)
请参阅XmlDocument.Save Method(TextWriter)。
使用正确的编码创建TextWriter
,并使用它而不是仅传递文件名。
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))
Using writer As TextWriter = New StreamWriter(fileName, correctEncoding)
xmldoc.Save(writer)
End Using