2016-09-30 4 views
0

私は今、HTMLを学習しており、エンコーディングに関連する1つの側面が私を混乱させます。HTML文書の `<meta charset =" B ">`の意味

私のテストエディタを開き、HTMLコードを書いて、文字セットA(たとえば、UTF-8またはANSIなど)を使用して保存します。そして、私の見解では次の処理が行われます。

  1. 私が入力したすべての文字が特定の番号にマッピングされ、マッピングが文字セットAによって指定されます。

  2. 番号が Sの配列および Sとしてのそれらのバイナリ表現にコンピュータメモリに保存されています。私はちょうどBは異なる別の文字セットである行<meta charset="B">がある保存したHTML文書で

ブラウザでHTML文書を開こうとするとどうなりますか?文字セットB sとのシーケンスが誤った文字(私がドキュメントを書いたときの意味ではない)を構成し、ゴミが表示されます。

この質問でわかるように、私は<meta charset="B">の本当の意味をHTML文書で理解しようとしています。

答えて

1

はい、まさにあなたは正しく理解しています。これは正確にどのようにmojibakeが生まれているかです。何かが間違った文字セットを使ってバイナリシーケンスを解釈しようとしています。意図せぬ/間違った文字が表示されたり、完全なデコードに失敗したりします。

<meta charset>要素(実際は主にContent-Type HTTPヘッダー)は、クライアント(ブラウザ)にドキュメントを解釈する必要がある文字セットを知らせるためのものです。さもなければ、クライアントは知ることができません。サーバー/ドキュメントが間違った文字セットにアドバイスしている場合、結果はある程度別のものに壊れてしまいます。

+0

フォローアップの質問をさせていただきます。 HTMLのデコードを開始するブラウザは、最初に ''という行をデコードする必要がありますが、使用する文字セットがわからないので行えません。 'はまだありません。 –

+1

ああ、catch 22実際には、 'Content-Type' HTTPヘッダーが' '要素をオーバーライドし、文書のエンコーディングを指定するのが主に望ましい方法です。行方不明の場合、ブラウザはさまざまな手法を採用しています。一言で言えば、1)エンコーディングを推測しようとするために数バイトを調べる、2)最初のキロバイトをデコードして、 ' 'の文字セット宣言が見つかるかどうかを調べる、3)情報に基づいた推測で再起動する。そのため、 ''要素が文書の最初のものの1つであるべきです。 – deceze

関連する問題