ero*_*ros 116 xml xml-declaration
我正在使用Xerces的Sax Parser解析XML文件.
是否<?xml version="1.0" encoding="UTF-8"?>
需要XML声明?
Hoy*_*len 176
在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"?>
Run Code Online (Sandbox Code Playgroud)
如果不以这种方式指定编码,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是真正的问题!
Xml声明是可选的,因此你的xml没有它就可以很好地形成.但建议使用它,以便解析器不会做出错误的假设,特别是关于所使用的编码.
归档时间: |
|
查看次数: |
151228 次 |
最近记录: |