VB.NET使用BOM将XML文档另存为UTF-8

问题描述

我已经编写了一个测试应用程序来修改数百个XML,基本上我修改了几个节点,然后再次保存XML。

输入的XML文件是UTF-8-BOM,但是输出的是UTF-8(在Notepad ++中查看)。

代码在VB.NET 4.7.2的控制台应用程序上运行,这是我的基本代码:

Dim myXML As XmlDocument = New XmlDocument
Dim nodelist As XmlNodeList
Dim node As XmlNode
myXML.Load(file)

nodelist = myXML.SelectNodes("//root/row") 

For Each node In nodelist
'All my code goes here
Next

myXML.Save(file)

我尝试过类似的事情:

myXML.CreateXmlDeclaration("1.0","UTF-16","")

但这没用。我一直在搜索,似乎每个人都有确切的相反的问题,并检查了MSDOC,我看不到任何指定BOM的引用:

https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmldeclaration.encoding?view=netframework-4.7

问题在于,当文件导入到没有BOM的数据库中时,某些字符显示损坏,因此我确实需要相同的编码。

大量阅读后,我可以尝试使用StreamWriter而不是XMLDocument重写我的应用程序,但是如果有解决方法,我会更喜欢它:)。谢谢!

解决方法

根据@JosefZ的建议,我使用了以下策略:

 Using writer = New XmlTextWriter(file,New UTF8Encoding(True))
            Dim xmlsettings As XmlWriterSettings = New XmlWriterSettings
            xmlsettings.OmitXmlDeclaration = False
            xmlsettings.ConformanceLevel = ConformanceLevel.Fragment
            xmlsettings = writer.Settings
            myXML.Save(writer)
        End Using

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...