0

我正在使用以下方法来创建 XML:

Private mXmlDocSave As XmlDocument

Using sw As XmlTextWriter = New XmlTextWriter(pSaveLocation & "\" & mFolderName & "\" & mFileName & ".kml", System.Text.Encoding.Default)
    mXmlDocSave.Save(sw)
End Using

以及以下解析 XML 的方法:

 Private mKMLDocument As New Xml.Linq.XDocument()
 mKMLDocument = XDocument.Parse(pXML)

如果我更改System.Text.Encoding.DefaultSystem.Text.Encoding.UTF8UTF-8 编码,解析 XML 将失败;但是当我使用System.Text.Encoding.DefaultANSI 编码解析 XML 时成功。我应该使用 UTF-8 编码来支持像 æ,Ü,¥ 这样的特殊字符。

如何使用 UTF-8 编码解决此问题

System.Text.Encoding.Default此外,我什至用ANSI 编码制作了 XML 。我懂了

<?xml version="1.0" encoding="UTF-8"?> 

在顶部。难道不应该

<?xml version="1.0" encoding="ANSI"?>

------------已编辑-------------

我正在使用以下代码读取 pXml

Public Sub LoadXML() 

Dim mKMLDocument As New Xml.Linq.XDocument()
Dim mKMLString As String
 Dim pXML As String
Dim UploadedFile As DevExpress.Web.ASPxUploadControl.UploadedFile
pXML = Encoding.UTF8.GetString(UploadedFile.FileBytes)
        If String.IsNullOrEmpty(pXML) Then
            mKMLString = ""
            mKMLDocument = Nothing

        Else
            mKMLString = pXML
            mKMLDocument = XDocument.Parse(pXML)
        End If

谢谢

Bibek Gautam 加德满都

4

1 回答 1

0

除了编码不正确之外,很难知道问题到底出在哪里。

据我从您的问题中可以看出,这是信息流:

  1. Xml 文档最初存储在 XmlDocument 中。这里没问题。
  2. Xml 文档使用 XmlTextWriter 保存到文件中。这里绝对没有问题。XmlTextWriter 将使用指定的编码写入文件并相应地设置 XML 声明。
  3. 该文件使用 DevExpress 上传到 Web 服务器。在此之前文件是否以任何方式更改?它是通过浏览器发送还是以编程方式发送?
  4. 使用 Encoding.GetString() 将文件内容转换为字符串。这里的潜在问题是服务器使用与客户端不同的编码。这很可能是正在发生的事情。
  5. 使用 XDocument 将字符串解析回 Xml。假设步骤 4 正确执行,这里没有问题。

几点观察:

System.Text.Encoding.Default 不是“ANSI”。我很确定 ANSI 不是有效的 Windows 编码,在我的系统中,默认编码是“Windows-1252”。这将根据特定 Windows 安装的语言设置配置而改变。在任何地方使用 Encoding.UTF8 应该可以解决您的问题。

问题可能出在以下两个地方之一:

  1. 如果文件是使用浏览器上传的:可能涉及人为错误。即上传的文件不是用UTF8 编码创建的文件。
  2. 如果文件加载了程序。该程序正在更改文件的编码,可能是通过在多部分帖子中发送文件之前将文件读取为字符串,而不是流式传输文件的字节内容。

调试:在调试器中查看 pXml 的内容。该文件的内容应该让您了解出了什么问题。

于 2013-05-30T06:21:02.853 回答