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", "")

但这并没有奏效。我一直在搜索,似乎每个人都有确切的opsite问题,在MSDOC中检查时,我看不到任何指定BOM或不指定BOM的参考:

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

问题是,当文件在没有BOM的情况下导入到DB时,一些字符会显示损坏,所以我真的需要相同的编码。

在阅读了这么多之后,我可以尝试使用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

最新更新