XercesのSax Parserを使用してXMLファイルを解析しています。
XML宣言は<?xml version="1.0" encoding="UTF-8"?>
必要ですか?
XercesのSax Parserを使用してXMLファイルを解析しています。
XML宣言は<?xml version="1.0" encoding="UTF-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
、任意の続くencoding
任意の続きます、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勧告では、文字エンコーディングを自動検出できる 1つの可能な方法について説明しています。実際には、入力がUTF-8、UTF-16、またはUS-ASCIIとしてエンコードされている場合、これはそれほど問題にはなりません。US-ASCIIの範囲外の文字(ISO 8859-1など)を使用する8ビットエンコーディングが検出された場合、自動検出は機能しません-可能な場合は作成しないでください。
standalone
XML文書が正しくDTDかをすることなく処理することができるかどうかを示します。人々はめったにそれを使用しません。最近では、DTDなしで情報が欠落しているXML形式を設計することは悪いことです。
更新:
「プロローグエラー/無効な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またはWordPadを使用してXMLを編集するのが本当の問題です。
XML宣言はオプションであるため、XMLはそれなしで整形式です。しかし、特に使用されるエンコーディングに関して、パーサーによって誤った仮定が行われないように、それを使用することをお勧めします。