文字エンコーディング

概要

ウェブページには大量のテキストが含まれており、ブラウザはこれらのテキストのエンコーディング方法を知る必要があります。そうしないと、テキストを正しく表示できません。

一般的に、サーバーがブラウザに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&#97;(十進数)または&#x61;(十六進数)として表現でき、文字&#20013;(十進数)または&#x4e2d;(十六進数)として表現できます。ブラウザはこれらを自動的に変換します。

<p>hello</p>
<!-- 等しい -->
<p>&#104;&#101;&#108;&#108;&#111;</p>
<!-- 等しい -->
<p>&#x68;&#x65;&#x6c;&#x6c;&#x6f;</p>

上記のコードでは、文字は直接表現することも、十進数または十六進数のコードポイントを使用して表現することもできます。

注意点として、HTMLタグ自体はコードポイントを使用して表現できません。そうしないと、ブラウザはこれを表示するテキスト内容として認識し、タグとして認識しません。例えば、<p><&#112;>または&#60;&#112;&#62;と書くと、ブラウザはこれをタグとしてではなく、テキスト内容として表示し、<p>と表示されます。

文字のエンティティ表現法

数値表現法の不便な点は、各文字のコードポイントを知らなければならず、記憶が難しいことです。迅速に入力できるようにするために、HTMLは特定の特殊文字に対して覚えやすい名前を定義し、名前でそれらを表現できるようにしています。これをエンティティ表現法(entity)と呼びます。

エンティティの書き方は&name;で、nameは文字の名前です。以下は一部の特殊文字とその対応するエンティティです。

  • <&lt;
  • >&gt;
  • "&quot;
  • '&apos;
  • &&amp;
  • ©&copy;
  • #&num;
  • §&sect;
  • ¥&yen;
  • $&dollar;
  • £&pound;
  • ¢&cent;
  • %&percnt;
  • *$ast;
  • @&commat;
  • ^&Hat;
  • ±&plusmn;
  • スペース:&nbsp;

注意点として、上記の最後の特殊文字は空白であり、それにも対応するエンティティ表現があります。

文字の数値表現法とエンティティ表現法は、通常は入力できない文字を表現することができ、ブラウザの制限を回避することができます。英語では「escape」と呼ばれ、中国語では「文字のエスケープ」と訳されています。


作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0