3 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
在XML 1.0中,XML聲明是可選的。請參閱XML 1.0建議書的第2.8節(jié),其中說“應(yīng)該”使用它 - 這意味著它是推薦的,但不是強(qiáng)制性的。但是,在XML 1.1中,聲明是強(qiáng)制性的。請參閱XML 1.1建議書的第2.8節(jié),其中說“必須”使用。它甚至繼續(xù)說明如果聲明不存在,那自動(dòng)意味著文檔是XML 1.0文檔。
請注意,在XML聲明中,encoding和standalone都是可選的。只有version強(qiáng)制性。此外,這些不是屬性,所以如果它們存在,它們必須按順序:version,然后是any encoding,然后是any standalone。
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
如果不以這種方式指定編碼,XML解析器會(huì)嘗試猜測正在使用的編碼。XML 1.0 Recommendation描述了一種可以自動(dòng)檢測字符編碼的方法。實(shí)際上,如果輸入編碼為UTF-8,UTF-16或US-ASCII,這不是什么大問題。當(dāng)遇到使用US-ASCII范圍之外的字符的8位編碼(例如ISO 8859-1)時(shí),自動(dòng)檢測不起作用 - 如果可以,請避免創(chuàng)建這些編碼。
的standalone指示是否將XML文檔可以在沒有DTD或無法正確處理。人們很少使用它。如今,如果沒有DTD,設(shè)計(jì)缺少信息的XML格式是不好的。
更新:
“prolog錯(cuò)誤/無效的utf-8編碼”錯(cuò)誤表示解析器在文件中找到的實(shí)際數(shù)據(jù)與XML聲明所說的編碼不匹配?;蛘咴谀承┣闆r下,文件中的數(shù)據(jù)與自動(dòng)檢測的編碼不匹配。
由于您的文件包含字節(jié)順序標(biāo)記(BOM),因此它應(yīng)采用UTF-16編碼。我懷疑你的聲明說明<?xml version="1.0" encoding="UTF-8"?>當(dāng)文件被NotePad改成UTF-16時(shí),這顯然是不正確的。簡單的解決方案是刪除encoding并簡單地說<?xml version="1.0"?>。您也可以編輯它來說encoding="UTF-16"但是原始文件(不是UTF-16)或者文件以某種方式變回UTF-8或其他編碼時(shí)會(huì)出錯(cuò)。
不要試圖刪除BOM - 這不是問題的原因。使用NotePad或?qū)懽职寰庉媂ML是真正的問題!

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
Xml聲明是可選的,因此你的xml沒有它就可以很好地形成。但建議使用它,以便解析器不會(huì)做出錯(cuò)誤的假設(shè),特別是關(guān)于所使用的編碼。
添加回答
舉報(bào)