129

Xerces の Sax Parser を使用して XML ファイルを解析しています。
XML宣言は<?xml version="1.0" encoding="UTF-8"?>必要ですか?

4

3 に答える 3

194

XML 1.0 では、XML 宣言オプションですXML 1.0 勧告のセクション 2.8 を参照してください。ここでは、「使用する必要がある」と記載されています。これは、推奨されているが必須ではないことを意味します。ただし、XML 1.1 では、宣言は必須です。XML 1.1 勧告のセクション 2.8 を参照してください。ここでは、「MUST」を使用する必要があります。さらに、宣言が存在しない場合、その文書が XML 1.0 文書であることを自動的に暗示しているとさえ述べています。

XML 宣言では、encodingstandaloneはどちらもオプションであることに注意してください。のみ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 を編集するのは本当の問題です。

于 2011-08-10T08:20:34.473 に答える
8

Xml 宣言はオプションであるため、XML はそれがなくても整形式です。ただし、特に使用されるエンコーディングに関して、パーサーによって間違った仮定が行われないように、それを使用することをお勧めします。

于 2011-08-10T07:47:11.107 に答える
4

versionandのデフォルト値を使用していない場合にのみ必要ですencoding(その例ではそうです)。

于 2011-08-10T07:51:48.530 に答える