web-dev-qa-db-ja.com

XMLヘッダーの「エンコーディング」とは何ですか?

XMLヘッダーを見る

<?xml version="1.0" encoding="UTF-16" standalone="no"?>

encoding属性が

  • 遅すぎる(エンコーディングがわからない場合、正しく読み取ることができません...)
  • 冗長でエラーが発生しやすい:ファイルを「Big5」に置き換えるのは簡単すぎるが、ファイルをUTF-8で保存する

または、その属性はストリームのcontentに関するものではありませんか?

ここで物事を混同していますか?

43
xtofl

おっしゃったように、encoding属性を読み取るには、ファイルのエンコーディングを知っている必要があります。

ただし、「実際の」エンコーディングに簡単に近づけて、エンコーディング属性を読み取れるようにするヒューリスティックがあります。 <?xml定義により、ASCIIの範囲の文字のみを含むことができます(ただし、エンコードされています)。

XML標準は エンコーディングを見つけるために使用される正確なプロセスを説明しています です。

また、エンコーディングラベルも冗長ではありません。たとえば、XML仕様のアルゴリズムを使用して、ASCIIベース(またはASCII互換)のエンコーディングが使用されていることを確認する場合、stillは、エンコーディングを読み取って見つける必要があります。実際にどれが使用されているか(有効な候補はASCII、UTF-8、 ISO-8859- *エンコーディング のいずれか、 Windows-* エンコーディングのいずれか、- KOI8-R およびその他多数。のために <?xml部分自体は、どの違いでも違いはありませんが、ドキュメントの残りの部分では、大きな違いが生じる可能性があります。

誤ってラベルが付けられたXMLファイルについて:はい、簡単に作成できますただし:XML仕様では、これらのファイルが不正な形式であることを明確に示しています。正しいXMLではありません。正しくないエンコーディングは、エラーとして報告する必要があります(検出できる限り)。つまり、XMLを作成する人の問題です。

41
Joachim Sauer

奇妙なデザインのように見えるのはあなたの言うとおりです。 XML宣言はASCII文字のみを使用し、ほとんどすべてのエンコーディングはASCIIのスーパーセットであるため、これは機能します。EBCDICなどではないものを受け入れる準備ができている場合は、ファイルが"<?xml"のEBCDIC表現で始まるかどうか。これは、純粋にエンコード属性自体ではなく、ファイルのヘッダーの一般的なレベルの冗長性に依存していることを意味します。XMLの多くのことと同様に、実用的で機能しますが、特にエレガントではありません。

6
Michael Kay

XMLパーサーは、少なくともUTF-8およびUTF-16をサポートするためにのみ必要です。 XMLパーサーは、バイトオーダーマーク(BOM)(存在する場合)(UTF-16、UTF-32、さらにはダミーBOMを含むUTF-8の場合)に基づいてエンコーディングを試すことから始めます。何も見つからない場合、パーサーはUTF-32、UTF-16、UTF-8、ASCIIおよびその他のASCII互換のシングルバイトエンコーディングを試行します。その場合のみ、エンコーディング属性が表示されます、必要に応じて解析を再開します。

2
Delan Azabani

原則として、ファイル内のencodingステートメントが「後期」であるという点があると思いますが、最初の行全体で基本的な文字のみが使用されています。私の知る限り、それらはほとんどすべてのエンコーディングで同じなので、どのようにデコードしても、それは<?xml ... ?>とにかく。

それの後に来るものは何でも問題になります。たとえば、CDATAセクションのテキストはキリル文字エンコーディングでエンコードできます。

0
Zsub