我认为这只是一个全球化问题,或者我应该用正确的编码中的分音符替换这个小字母a,但是现在我不确定如何。
我最近开始学习VB.NET,似乎不支持字符串转义。作为针对实时数据的一点实践应用,我写了以下内容:
Sub Main()
Console.WriteLine(GetXml().Substring(800, 50))
Transform()
End Sub
Sub Transform()
Dim xml = GetXml()
Dim xsl = GetXsl()
Dim writer As New StringWriter()
Dim xPath = New XPathDocument(GetReader(xml))
Dim xslTransform = New XslCompiledTransform()
xslTransform.Load(GetReader(xsl))
xslTransform.Transform(xPath, Nothing, writer)
Console.Write(writer.ToString())
End Sub
Public Function GetReader(input As String) As XmlReader
Dim memStream = New MemoryStream()
Dim data = Encoding.Default.GetBytes(input)
memStream.Write(data, 0, data.Length)
memStream.Position = 0
Return XmlReader.Create(memStream)
End Function
GetXml
和GetXsl
字面上返回一个硬编码的xml字符串和一个硬编码的xsl字符串。问题是数据是从我们的一个实时系统中获得的,并且是德语。我将在未来获得类似的数据。这意味着我在标题中遇到了字符,并且在运行时也出现了以下错误:
Unhandled Exception: System.Xml.XmlException: Invalid character in the given enc
oding. Line 1, position 804.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
at System.Xml.XmlTextReaderImpl.InvalidCharRecovery(Int32& bytesCount, Int32&
charsCount)
at System.Xml.XmlTextReaderImpl.GetChars(Int32 maxCharsCount)
at System.Xml.XmlTextReaderImpl.ReadData()
at System.Xml.XmlTextReaderImpl.ParseCDataOrComment(XmlNodeType type, Int32&
outStartPos, Int32& outEndPos)
at System.Xml.XmlTextReaderImpl.ParseCDataOrComment(XmlNodeType type)
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XPath.XPathDocument.LoadFromReader(XmlReader reader, XmlSpace s
pace)
at System.Xml.XPath.XPathDocument..ctor(XmlReader reader, XmlSpace space)
at System.Xml.XPath.XPathDocument..ctor(XmlReader reader)
at VBXSLTtoXML.Module1.Transform() in c:\users\eon\documents\visual studio 20
13\Projects\VBXSLTtoXML\VBXSLTtoXML\Module1.vb:line 18
at VBXSLTtoXML.Module1.Main() in c:\users\eon\documents\visual studio 2013\Pr
ojects\VBXSLTtoXML\VBXSLTtoXML\Module1.vb:line 11
目前,我该怎么做才能解决错误并允许New XPathDocument(GetReader(xml))通过?我应该修改检索到的XML以替换不受支持的字符吗?
答案 0 :(得分:1)
使用字符编码时,明确告诉解析器使用哪种编码总是一个好主意。
您会相信,由于XML声明<?xml version=""1.0"" encoding=""utf-8""?>
,编码器会自动选择UTF-8,但遗憾的是情况并非如此。
正如您在上面对自己的回复中所述,请使用GetReader函数 - Encoding.UTF8.GetBytes()
。