文字エンコーディング
概要
ウェブページには大量のテキストが含まれており、ブラウザはこれらのテキストのエンコーディング方法を知る必要があります。そうしないと、テキストを正しく表示できません。
一般的に、サーバーがブラウザに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