簡體   English   中英

XmlException:給定編碼中的無效字符

[英]XmlException: Invalid character in the given encoding

我有UTF-8編碼的xml

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

使用以下版本的xml reader時。 我假設這使用UTF-8語法分析xml文件。

 using (XmlReader reader = XmlReader.Create(inputUri))

我在例外之下。

System.Xml.XmlException occurred
  HResult=-2146232000
  LineNumber=18750
  LinePosition=13
  Message=Invalid character in the given encoding. Line 18750, position 13.

但是當使用以下版本的xmlreader時

using (XmlReader reader = XmlReader.Create(new StreamReader(inputUri,Encoding.UTF8)))

xml成功解析。 為什么這兩個版本之間的這種差異都使用相同的編碼來解析給定的xml文件?

PS:我非常確定第一個版本使用UTF-8終結。

以下是XmlTextReaderImpl.cs的片段,其實例由第一個版本返回。

        private void SetupEncoding( Encoding encoding ) {
            if ( encoding == null ) {
                Debug.Assert( ps.charPos == 0 );
                ps.encoding = Encoding.UTF8;
                ps.decoder = new SafeAsciiDecoder(); // This falls back to UTF-8 decoder
            }
}

我在msdn論壇中得到了答案。

“ XmlReader會將任何非法字符標記為非法,因為XML格式已損壞。

在第二種情況下,因為StreamReader是通用的文本閱讀器,所以當它遇到不在Encoding定義的范圍內的數據時,它將用替換fallback替換字符。 因此,當您將結果流傳遞給XmlReader時,它現在可以看到的所有字符都位於該編碼定義的合法范圍內。”

using (XmlReader reader = XmlReader.Create(inputUri))

上面的代碼將使用XmlReader的編碼,並且將忽略文件的編碼聲明。

這就是發生異常的原因,也是第二種方法起作用的原因-當您提供要使用的UTF-8編碼時。

注意:我認為默認編碼為UTF-16

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM