Xerces の Sax Parser を使用して XML ファイルを解析しています。
XML宣言は<?xml version="1.0" encoding="UTF-8"?>
必要ですか?
3 に答える
XML 1.0 では、XML 宣言はオプションです。XML 1.0 勧告のセクション 2.8 を参照してください。ここでは、「使用する必要がある」と記載されています。これは、推奨されているが必須ではないことを意味します。ただし、XML 1.1 では、宣言は必須です。XML 1.1 勧告のセクション 2.8 を参照してください。ここでは、「MUST」を使用する必要があります。さらに、宣言が存在しない場合、その文書が 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 勧告では、文字エンコーディングを自動検出する方法の 1 つが説明されています。実際には、入力が UTF-8、UTF-16、または US-ASCII としてエンコードされている場合、これは大きな問題ではありません。US-ASCII 範囲外の文字を使用する 8 ビット エンコーディング (ISO 8859-1 など) に遭遇した場合、自動検出は機能しません。可能であれば、これらのエンコーディングを作成しないでください。
はstandalone
、XML ドキュメントが DTD なしで正しく処理できるかどうかを示します。人々はめったにそれを使用しません。最近では、DTD なしで情報が欠落している XML 形式を設計するのは良くありません。
アップデート:
「プロローグ エラー/無効な utf-8 エンコーディング」エラーは、パーサーがファイル内で見つけた実際のデータが、XML 宣言が示すエンコーディングと一致しなかったことを示します。または、場合によっては、ファイル内のデータが自動検出されたエンコーディングと一致しませんでした。
ファイルにはバイト オーダー マーク (BOM) が含まれているため、UTF-16 エンコードにする必要があります。<?xml version="1.0" encoding="UTF-8"?>
ファイルがメモ帳によって UTF-16 に変更された場合、あなたの宣言は明らかに間違っていると思われます。簡単な解決策は、 を削除してencoding
、単に<?xml version="1.0"?>
. それを編集して言うこともできますがencoding="UTF-16"
、元のファイル (UTF-16 ではなかった) に対して、またはファイルが何らかの方法で UTF-8 または他のエンコーディングに変更された場合、それは間違っています。
BOM を削除しようとするのはやめてください。それは問題の原因ではありません。メモ帳やワードパッドを使用して XML を編集するのは本当の問題です。
Xml 宣言はオプションであるため、XML はそれがなくても整形式です。ただし、特に使用されるエンコーディングに関して、パーサーによって間違った仮定が行われないように、それを使用することをお勧めします。
version
andのデフォルト値を使用していない場合にのみ必要ですencoding
(その例ではそうです)。