3 回答

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

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