文字エンコーディング
概要
ウェブページには大量のテキストが含まれており、ブラウザはこれらのテキストのエンコーディング方法を知る必要があります。そうしないと、テキストを正しく表示できません。
一般的に、サーバーがブラウザにHTMLウェブページファイルを送信する際、HTTPヘッダーでウェブページのエンコーディング方式を宣言します。
Content-Type: text/html; charset=UTF-8
上記のコードでは、HTTPヘッダーのContent-Typeフィールドが、サーバーが送信するデータのタイプをtext/html(つまりHTMLウェブページ)と宣言し、その後にウェブページの文字エンコーディングをUTF-8と宣言しています。
ウェブページ内部でも、<meta>タグを使用して再度エンコーディングを宣言します。
<meta charset="UTF-8">
文字の数値表現法
ウェブページは異なる言語のエンコーディング方式を使用できますが、最も一般的に使用されるのはUTF-8です。UTF-8エンコーディングは、Unicodeキャラクターセットの一つの表現方法です。このキャラクターセットの設計目標は、世界中のすべての文字を含むことです。現在、十万を超える文字が収録されています。
各文字にはUnicode番号があり、これをコードポイント(code point)と呼びます。コードポイントがわかれば、それがどの文字であるかを調べることができます。例えば、英字のaのコードポイントは十進数の97(十六進数の61)、漢字の「中」のコードポイントは十進数の20013(十六進数の4e2d)です。
以下の理由から、すべてのUnicode文字が直接HTML言語内で表示できるわけではありません。
(1)すべてのUnicode文字が印刷可能なわけではなく、一部には印刷可能な形式が存在しません。例えば、改行符のコードポイントは十進数の10(十六進数のA)ですが、これには対応するリテラル形式がありません。
(2)小なり記号(<)と大なり記号(>)はHTMLタグを定義するために使用され、他の場面でこれらの記号を使用する場合、タグとして解釈されるのを防がなければなりません。
(3)Unicode文字があまりにも多いため、すべての文字を直接入力できる入力方法は見つかりません。言い換えれば、すべての記号を入力できるキーボードは存在しません。
(4)ウェブページでは複数のエンコーディングを混合して使用することはできません。UTF-8エンコーディングを使用している場合、他のエンコーディングの文字を挿入しようとすると非常に困難になります。
HTMLはこれらの問題を解決するために、Unicodeコードポイントを使用して文字を表現することを許可しています。ブラウザは自動的にコードポイントを対応する文字に変換します。
文字のコードポイント表現は&#N;(十進数、Nはコードポイントを示す)または&#xN;(十六進数、Nはコードポイントを示す)です。例えば、文字aはa(十進数)またはa(十六進数)として表現でき、文字中は中(十進数)または中(十六進数)として表現できます。ブラウザはこれらを自動的に変換します。
<p>hello</p>
<!-- 等しい -->
<p>hello</p>
<!-- 等しい -->
<p>hello</p>
上記のコードでは、文字は直接表現することも、十進数または十六進数のコードポイントを使用して表現することもできます。
注意点として、HTMLタグ自体はコードポイントを使用して表現できません。そうしないと、ブラウザはこれを表示するテキスト内容として認識し、タグとして認識しません。例えば、<p>を<p>または<p>と書くと、ブラウザはこれをタグとしてではなく、テキスト内容として表示し、<p>と表示されます。
文字のエンティティ表現法
数値表現法の不便な点は、各文字のコードポイントを知らなければならず、記憶が難しいことです。迅速に入力できるようにするために、HTMLは特定の特殊文字に対して覚えやすい名前を定義し、名前でそれらを表現できるようにしています。これをエンティティ表現法(entity)と呼びます。
エンティティの書き方は&name;で、nameは文字の名前です。以下は一部の特殊文字とその対応するエンティティです。
<:<>:>":"':'&:&©:©#:#§:§¥:¥$:$£:£¢:¢%:%*:$ast;@:@^:^±:±- スペース:
注意点として、上記の最後の特殊文字は空白であり、それにも対応するエンティティ表現があります。
文字の数値表現法とエンティティ表現法は、通常は入力できない文字を表現することができ、ブラウザの制限を回避することができます。英語では「escape」と呼ばれ、中国語では「文字のエスケープ」と訳されています。
作者: wangdoc
アドレス: https://wangdoc.com/
ライセンス: クリエイティブ・コモンズ 3.0