3 回答

TA贡献1898条经验 获得超8个赞
在XML 1.0中,XML声明是可选的。请参阅XML 1.0建议书的第2.8节,其中说“应该”使用它 - 这意味着它是推荐的,但不是强制性的。但是,在XML 1.1中,声明是强制性的。请参阅XML 1.1建议书的第2.8节,其中说“必须”使用。它甚至继续说明如果声明不存在,那自动意味着文档是XML 1.0文档。
请注意,在XML声明中,encoding和standalone都是可选的。只有version强制性。此外,这些不是属性,所以如果它们存在,它们必须按顺序: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解析器会尝试猜测正在使用的编码。XML 1.0 Recommendation描述了一种可以自动检测字符编码的方法。实际上,如果输入编码为UTF-8,UTF-16或US-ASCII,这不是什么大问题。当遇到使用US-ASCII范围之外的字符的8位编码(例如ISO 8859-1)时,自动检测不起作用 - 如果可以,请避免创建这些编码。
的standalone指示是否将XML文档可以在没有DTD或无法正确处理。人们很少使用它。如今,如果没有DTD,设计缺少信息的XML格式是不好的。
更新:
“prolog错误/无效的utf-8编码”错误表示解析器在文件中找到的实际数据与XML声明所说的编码不匹配。或者在某些情况下,文件中的数据与自动检测的编码不匹配。
由于您的文件包含字节顺序标记(BOM),因此它应采用UTF-16编码。我怀疑你的声明说明<?xml version="1.0" encoding="UTF-8"?>当文件被NotePad改成UTF-16时,这显然是不正确的。简单的解决方案是删除encoding并简单地说<?xml version="1.0"?>。您也可以编辑它来说encoding="UTF-16"但是原始文件(不是UTF-16)或者文件以某种方式变回UTF-8或其他编码时会出错。
不要试图删除BOM - 这不是问题的原因。使用NotePad或写字板编辑XML是真正的问题!
- 3 回答
- 0 关注
- 959 浏览
相关问题推荐
添加回答
举报