2016-04-08 8 views
4

xmlファイルを処理(Unmarshall)している間に、XMLエンコーディングに疑問を持っています。 xmlファイルのエンコーディングは、ファイルの先頭に次のように指定します。プログラムはxmlファイルのエンコーディングをどのように決定しますか?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

私の質問は、この行を読んだ後、次の内容がUTF-8でエンコードされていると判断したことです。しかし、この最初の行を読むために、プログラムはUTF-8でコード化されているとどのように判断しますか?私は、バイトストリームを読んでいる間、プログラムはどのように最初の行のどのエンコーディングを使用する必要があることを知っているのですか?

よろしく、 Mayuran

答えて

1

これは、セクションF.1に書かれています。 XML仕様で:外部エンコーディング情報

なし

F.1検出各XMLエンティティは、外部エンコーディングによって 情報を伴わないのではなくUTF-8またはUTF-16エンコーディングでXMLで始まる必要があります エンコーディング宣言では、, のいずれかの一致するプロセッサが、 入力の2〜4オクテット後に検出できます。次のいずれかのケースが該当します。このリストを読んで、それ UCS-4で、<#x0000003C?であることを知るために役立つことは #x0000003Fで、バイトオーダーマークはUTF-16データストリームの必要#xFEFFです。

  1. バイトorder-がある:表記##は、2つの連続した## Sは基本的に両方の00

ことができないこと 以外の任意のバイト値を示すために使用され、2つのオプションがありますマーク(BOM)

  • BOMはありません。
  • specificationは、その後明らかに特定のオクテットのテーブルを文書プロセッサは、アップスルーencoding宣言を見て使用する符号化を決定するために使用するストリーム。

    +0

    ** **あります。私は仕様を見ていて、それがそこにあることを知っていましたが、あなたが上記を投稿する前にF.1にかなり落ちていませんでした。良いですね。 –

    +0

    @RobAu、答えをありがとうが、私はまだ理解できない、 "<?xml"というテキストを読むには、最初にエンコーディングを決める必要がありますか?エンコーディングを決めることなく、それは "<?xml"であることをどのように知っていますか?私はUTF-8エンコーディングは "<?xml"だと信じています。他のエンコーディングを使用すると、異なる文字セットとして解釈される可能性があります。ちょうど私の考えだけ。私が間違っている場合は私をクリアしてください。 – Mayuran

    +0

    バイトオーダーマークがない場合は、最初の数バイトを読み込み、UTF-16などの異なるエンコーディングを試してください。文字列 '<?xml'を与える​​エンコーディングは、行の残りの部分を読み込むために使用する必要があります。 – RobAu

    関連する問題