【问题标题】:VB.NET Save XMLdocument as UTF-8 with BOMVB.NET 使用 BOM 将 XML 文档保存为 UTF-8
【发布时间】:2020-12-10 19:20:46
【问题描述】:

我写了一个测试应用程序修改了几百个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 重写我的应用程序,但如果有解决方法,我会更喜欢它:)。谢谢!

【问题讨论】:

  • 输入文件是否显示字符损坏?你能用 BOM 名称显示输入文件的声明吗? DB中字段的编码是一样的吗?
  • 检查this answer(似乎与您的问题相反,所以使用New XmlTextWriter(file, New UTF8Encoding(True))

标签: vb.net encoding utf-8 byte-order-mark


【解决方案1】:

正如@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

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2011-10-19
    • 2020-12-08
    • 2018-06-14
    • 1970-01-01
    相关资源
    最近更新 更多