[英]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.