2

我一直在寻找几个小时现在没有成功!

我有一个 XML 文件(由程序创建),我喜欢从中获取信息。现在,我的问题是,文件的标题是 UFTF-8,但文件是用 UNICODE 编码的!VB.net XmlTextReader 不会读取该文件...!?一旦它到达“加载”,它就会抛出异常。然后我在 Notepad++ 中打开了数千个 XML 文件中的一个,并将其保存为 UFT-8 - 好吧,猜猜看!该文件有效!

但我不认为我想更改我们服务器上的所有文件(每天都会添加新文件!)而且我认为我不能让开发人员更改他保存这些 XML 文件的方式。

关于如何“欺骗”VB.net 读取这些文件的任何想法?

谢谢!

4

2 回答 2

3

将文件读入内存时可以更改编码

Dim Stream As New IO.StreamReader("File.xml", System.Text.Encoding.UTF8)
Dim Reader As New Xml.XmlTextReader(Stream)

对于更高级的方法,您可以先检测文件的编码,然后尝试更改它。

于 2013-07-08T14:10:36.093 回答
1

首先,您需要将不可靠的 XML 读入字节数组。然后将其转换为指定字符编码的字符串。

像这样

    Using fsSource As FileStream = New FileStream(pathSource, _
        FileMode.Open, FileAccess.Read)
        ' Read the source file into a byte array. 
            Dim bytes() As Byte = New Byte((fsSource.Length) - 1) {}
            Dim numBytesToRead As Integer = CType(fsSource.Length,Integer)
            Dim numBytesRead As Integer = 0

            While (numBytesToRead > 0)
                ' Read may return anything from 0 to numBytesToRead. 
                Dim n As Integer = fsSource.Read(bytes, numBytesRead, _
                    numBytesToRead)
                ' Break when the end of the file is reached. 
                If (n = 0) Then 
                    Exit While 
                End If
                numBytesRead = (numBytesRead + n)
                numBytesToRead = (numBytesToRead - n)

            End While
        numBytesToRead = bytes.Length

        Dim strText As String = System.Text.Encoding.GetEncoding(1252).GetString(bytes)
    End Using 

我在这里使用的是 windows-1252,但您需要将其更改为这些文件的编码。

于 2013-07-08T14:31:31.170 回答