昨日の同じ日にxmlのencoding属性とファイル形式の関係について同僚と議論していて、ようやくよく理解できました。
私のこれまでの理解では、XML のエンコード定義はファイル形式と一致する必要があると考えられていました。つまり、このような XML Introduction (FF FE は utf-8 の BOM ではないことが後でわかりました...つまり、私の誤解はかなり長い間続いたということです...)
議論のいくつかの段階について簡単に説明しましょう。
ディスカッションの初めに、私は彼に、エンコード値はファイル形式 (つまり、BOM、BOM はバイト オーダー マークの略語です) と一致する必要があることを確実に伝えました。そうしないと、XML を解析するときに、エンコード値が表示される可能性があります (たとえば、ドキュメント特定の UNICODE 文字が含まれており、エンコーディングまたは BOM で指定された形式が一致しない場合、エラーが発生します)、そして、XML ファイルはそうではないようだと私に言いました。 DELPHI で作成したものは BOM がなく、XML に中国語が含まれていましたが、指定されたエンコーディングは UTF-8 で、IE では正常に開くことができました。
彼が作成した XML ファイルに BOM がないことを発見したとき、興味深いことに、UE を使用して UNICODE 文字を含むそのようなファイルを開くと、ファイルが表示できるように UE がファイルの前に FF FE を自動的に追加するということでした。通常、UE で 16 進数の BOM がないファイルを参照すると、追加の BOM が表示されます。知りたい場合は、UE の OPTIONS で削除できます。
それから私は少し混乱しました、どうしてこんなことが起こるのでしょうか?そして考えて考えました、そして突然彼は次の内容のメッセージを送りました:
W3C は XML パーサーがどのようにエンコーディングを正しく読み取ることができるかについて 3 つのルールを定義します。 XML ファイル:
1. ドキュメントに BOM (一般的に言えば、Unicode 形式で保存されている場合は BOM が含まれますが、ANSI には含まれません) がある場合、ファイル エンコーディングが定義されます 2. BOM がない場合は、XML で宣言されたエンコード属性を確認してください
3. 上記のどちらも存在しない場合、XML ドキュメントは UTF-8 でエンコードされているとみなされます
これら 3 つのルールを使用すると、ルールがより明確になります。
まず、XML パーサーはファイルの BOM に従ってファイルを解析します。BOM が見つからない場合は、XML のエンコーディング属性で指定されたエンコーディングが使用されます。XML でエンコーディングが指定されていない場合は、UTF-8 が使用されます。ドキュメントを解析するためにデフォルトで使用されます。 BOM と ENCODING の両方がある場合は、BOM で指定されたものが優先されます。 ああ!突然、標準的なドキュメントがあればどんなに素晴らしいだろうと感じました。すごく自然なことなのに。
この時点で、XML におけるエンコードとファイル形式の関係がようやく理解できました。この記録には数百語しか含まれていませんが、議論していると合計時間は 2 時間近くかかりました。
以上がXMLでのエンコードについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。