本帖最后由 bcrun 于 2014-11-28 13:46:18 编辑

解决方案 »

  1.   

    怎么感觉你不是用msxml组件写入的啊?
      

  2.   

    是用msxml组件写入的,设定xml编码为GB2312或GBK都显示正常,就是设成UTF-8就乱码,我查看了二进制文件,少了一个字节,所以乱码,但我的文件必须保存为UTF。是不是写入之前还要在VB内部用什么函数转换一下?
      

  3.   

    通过什么方式查看xml的?
    给个简单的出错例子。
      

  4.   

    临时写了下,大致是这样:   Sub Main()
        Dim xmldoc As DOMDocument
        Dim values_node As IXMLDOMNode
        Dim RssNode As IXMLDOMNode
        Set xmldoc = New DOMDocument
        Set pi = xmldoc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
        xmldoc.appendChild pi
        Set RssNode = xmldoc.CreateNode(NODE_ELEMENT, "rss", "")
        xmldoc.appendChild RssNode
        Set values_node = xmldoc.createElement("test")
        RssNode.appendChild values_node
        CreateNode values_node, "Value", "测/试/行"
        xmldoc.save m_AppPath & "test.xml"
        Set xmldoc = Nothing
      End Sub
     Private Sub CreateNode(ByVal parent As IXMLDOMNode, ByVal node_name As String, ByVal node_value As String)
        Dim new_node As IXMLDOMNode
        Set new_node = parent.ownerDocument.createElement(node_name)
        new_node.Text = node_value
        parent.appendChild new_node
    End Sub
      

  5.   

    Sub Main()
        ...
        'xmldoc.save m_AppPath & "test.xml"
        SaveWithEncoding xmldoc, m_AppPath & "test.xml", "UTF-8"
        ...
    End Sub
     
    Private Sub SaveWithEncoding(ByVal xmldoc As DOMDocument, _
                                 ByVal FileName As String, _
                                 ByVal Encoding As String)
        Dim s As ADODB.Stream
        Set s = New ADODB.Stream
        With s
            .Open
            .Type = adTypeText
            .Charset = Encoding
        
            xmldoc.save s
        
            .SaveToFile FileName
            .Close
        End With
    End Sub
      

  6.   

    谢谢赵老师,我找到原因了,是我存为xml后又使用了一个不恰当的字符串替换方式,导致其编码错误。我想再问一下,vb操作xml时,有没有内置的字符串替换函数,而不改变其编码的?
      

  7.   

    通过操作XMLDOM来替换啊。
    用纯字符串处理不仅有编码问题、还有字符转义问题。
      

  8.   

    楼主啊,你这个XML的处理需求,要不是因为对速度要求太高,MSXML库受不了的话,还是老实用这个库得了。
      

  9.   

    OK,您说的我理解,但那是替换节点内容,我是替换二进制字符串,与XML结构无关,多谢两位,希望VB版块有你们这些热心人在,能长久不衰。只是这个CSDN服务器太不给力,经常网页打不开。