0

我正在将一个 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 在下面指出的,但没有成功。

4

1 回答 1

-1

请参阅XmlDocument.Save 方法(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
于 2013-07-17T03:18:42.193 回答