HTML文書の文字コードとエンコーディング。

ここでは、HTML文書で用いられる文字コードとそのエンコーディングについて解説します。

文字コードとエンコーディング。

文字コードとは、その名の通り、コンピュータで取扱う文字に与えられた番号の事です。

コンピュータはあらゆる情報を数値で扱うため、テキストについても文字一個一個に番号を与える事で処理しているのです。

日本語の場合、仮名漢字などについてはJISが区点コードを策定しましたが、これをコンピュータで取扱うための約束事として文字コードの電子的な表現法(エンコーディングと呼びます)が幾つか用意されております。

また、今日ではユニコードと呼ばれる世界共通の文字コードが策定されましたが、これもコンピュータで取扱うためにUTFと呼ばれるエンコーディングが行なわれております。

  • JIS区点コードとユニコードには互換性はありません。このため、現在日本語ではJIS区点コードを元としたエンコーディングとユニコードを元としたUTFコードのいずれかから撰ぶ事となります。

日本語の主なエンコーディング。

それでは、日本語文書作成で用いられる事があるエンコーディングについて解説します。

ISO-2022-JP(JISコード)。

ISO-2022-JPはしばしばJISコードと呼ばれます。

JISで定められた区点コードを 7ビットに収まるようにデータ化したものです。

このエンコーディングでは、エスケープシークェンスと呼ばれる特別な記号で半角英数字と仮名漢字を切り替えております。

この方法の特徴は、アスキィ文字しか正しく扱えない 7ビット環境でも漢字を含めたデータのやり取りがデータの欠落に依る文字化けを心配せずに出来る事が挙げられます。

このため、古来から日本語電子メールではISO-2022-JPを用いる事とされております。

一方、コンピュータプログラミングでは非常に扱い難いエンコーディングであります。

また、ISO-2022-JPでは半角仮名文字に関する扱いが後になって追加されたため、それに対応していない旧いメールクライアントやブラウザなどで問題が起こる事があり、このため半角仮名文字は使ってはいけない事とされております。

これらの事があってか、ISO-2022-JPはウェブでは余り見掛けなくなりました。

シフトJISコード。

シフトJISコードはウィンドウズ及びマック OS上で日本語を取扱う場合に用いられます。

シフトJISコードでは区点コードを与えられた全角文字を半角文字二文字分( 2オクテット=16ビット)で表す事とされており、一文字目はアスキィ文字及び半角仮名文字と重複しないようなコードが与えられております。

このため、半角仮名文字も問題なくデータとして扱えるようになっております。

  • 但し、旧い環境では一部正常に扱えない場合もあります。

シフトJISコードは対応しているOSが多い事から、今も多くの環境で利用されております。

但し、コンピュータプログラミングではシフトJISコードはISO-2022-JP程では無いものの、結構厄介なエンコーディングとなっております。

  • 勿論、ウィンドウズやマック OS上でも、対応しているエディタを使えばシフトJISコード以外のエンコーディングでデータ化する事も可能です。
  • また、OSに拘らず、ウェブブラウザは殆どのエンコーディングが扱えるようになっております。

対応しているOSが多い事もあって、今でもシフトJISコードはウェブでは結構見掛けるようです。

  • 特に手書きのHTML文書には多いようです。

携帯電話向けのサイトの場合、旧型機種を中心にシフト JIS コード以外に対応していない端末があるため、必ずシフト JIS コードでエンコーディングしなければなりません

日本語EUC。

日本語EUCはユニックス及びユニックス互換のOS(リナックスやフリーBSDなど)で日本語を扱う場合に用いられます。

日本語で用いられる区点コードを持つ全角文字を半角文字二文字分( 2オクテット=16ビット)で表しますが、一文字目・二文字目ともアスキィ文字と重複しない文字コードが割り当てられております。

  • 半角カタカナも 2オクテットとなります。

このため、日本語EUCのデータはコンピュータプログラミングでも問題が起こり難く、日本語EUCは古来からコンピュータプログラミングでは好ましいエンコーディングとされております。

ヤフー・ジオシティズなどのオンラインエディタで作成したHTML文書なども日本語EUCで書き出しますが、これも日本語EUCが取扱い易い事が理由です。

本来ならUTF-8コードを用いるべき場合であっても、日本語文字が 2オクテットになってUTF-8よりファイルサイズが小さくなる事や、既存のコードをそのまま使える事などから、今もウェブログサーヴィスなどウェブプログラムで採用している例は少なくありません。

  • 但し、手書きのHTML文書で使われる事は余りないようです。

UTF-8コード。

UTF-8コードは世界共通の文字コードであるユニコードをインターネットなどで扱うためのエンコーディングです。

日本語の仮名文字及び漢字(日本語以外で用いられる漢字及び半角カタカナを含む)は一部を除いて半角アスキィ文字三文字分( 3オクテット=24ビット)で表され、一文字目は明らかに仮名や漢字の一文字目と判るエンコーディングとなっており、二文字目以降もやはり複数文字で表される文字の二文字目以降のコードと分かるようになっております。

このため、コンピュータプログラミングでも問題が殆ど起こらないエンコーディングとなります。

また、ユニコードは日本語以外の非英語言語の文字も一緒に扱えるようになっております。

  • JISコードでもギリシャ文字やスラヴ文字が扱えるようにはなっておりますが、ハングルや日本語に無い漢字を用いた中国語は表現出来ません。

加えてJIS第一水準・第二水準に無い漢字も自由に扱え、他のエンコーディングでは機種依存となるような丸囲み数字やローマ数字なども問題なく記述出来ます

  • 閲覧環境に依っては、フォントが実装されていないなどの理由から一部文字が表示出来ない場合があります。

但し、後発のエンコーディングのため、旧いウェブブラウザなどで文字化けが起こると言う欠点があります。

  • もっとも、PC向けのウェブブラウザの場合、非対応だったネットスケープ 3.xまでは既にユーザも皆無に近くなっており、今ではPC向けのサイトに於いては問題にする必要はなくなったようです。

但し、携帯電話には旧型機を中心に UTF-8 非対応のものがありますのでシフト JIS コードを用いなければなりません。

もう一つの欠点として、日本語文書の場合ファイルサイズがシフトJISコード日本語EUCの一・五倍になります

多くのウェブプログラムが採用している事もあり、ウェブログサーヴィスやウィキサーヴィスなどでは多くがUTF-8を採用しておりますが、ファイルサイズが大きくなってしまうなどの理由から、今日でも日本語環境向けのサーヴィスでは敢えて日本語EUCを用いている例も少なくありません。

UTF-16コード。

UTF-8コード同様ユニコードをインターネットで扱えるようにしたエンコーディングです。

UTF-8コードやシフトJISコードなどと異なり、一つのデータが16ビット単位( 2オクテット)となるため、他のエンコーディングなら 8ビットで済んだ半角英数字が倍の大きさになってしまい、従って文書サイズが倍になってしまうという事から、好ましいエンコーディングとされてはいるものの殆ど用いられておりません。

従って、ユニコードで書かれたウェブ文書ではUTF-8コードが主流となっております。

但し、日本語文字などではシフトJISコードや日本語EUC同様 2オクテットとなるため、日本語文字が多ければもUTF-8コードより有利になる事もあり得ます。

どのエンコーディングで作成されているか?

実際にテキストエディタを使って文書を作成したとき、どのエンコーディングが使われているかを把握しておく必要があります。

  • 多くの場合、ウィンドウズやマック OS上ではシフトJISコードで日本語テキストファイルが作成されるでしょう。
  • ユニックスやリナックスなどユニックス互換のOS上でなら、日本語EUCUTF-8コードで日本語テキストファイル作成されるでしょう。

但し、最近ではユニコードが普及しているため、UTF-8コードがデフォルトとなっていたり、UTF-8コードを選択出来るようになっている事も少なくありません。

また、配布されているエディタに依っては、より多くのエンコーディングの選択肢から撰べるようになっているものも決して少なくありません。

使用するテキストエディタに依っては、適切なエンコーディングを撰べるようになるでしょう。

  • 特に携帯電話向けのコンテンツでは今もシフトJISコードでコンテンツを作成しないといけません。

参考 1・ウィンドウズのメモ帳の場合。

  • 以下の説明はウィンドウズ XP 以降のOSでの話です。旧ヴァージョンのウィンドウズ上のメモ帳ではシフトJISコード以外での保存が出来ないものがあります。

ウィンドウズに標準添付されているテキストエディタ・メモ帳で文書を作製して保存する場合、エンコーディングを選択する事が出来ますが、その扱いは以下のようになります。

ANSI
日本語環境ではシフトJISコードで保存されます。

但し、JIS第一水準・第二水準を逸脱している文字(特に丸数字やローマ数字など)が含まれている場合は機種依存となりますので注意して下さい。

Unicode
Unicode big endian
いずれもUTF-16コードで保存されます。

UTF-16コードにはいくつかの種類があり、その違いが二つのタイプとなっておりますが、当然ながら違いは簡単に判別出来るようになっているのでどちらを用いても問題はありません。

  • ファイルの冒頭にBOM(バイトオーダマーク)と呼ばれる特殊符号が入り、その符号で判別出来るようになっております。

また、UTF-16コードはユニコードですので、JIS第一水準・第二水準を逸脱している文字が含まれていても機種依存になりません。

  • 丸数字やローマ数字なども機種依存でなくなります。
  • 一部の独自文字や外字はUTF-16で保存しても機種依存です。
UTF-8
UTF-8コードで保存されます。

但し、ウィンドウズのメモ帳の場合、UTF-8を撰んで保存するとファイルの冒頭にBOM(バイトオーダマーク)と呼ばれる特殊符号が入ります。

  • JAVAスクリプトなどプログラミング言語ではBOMがエラーの原因になる場合がありますが、HTML文書ではトラブルになる事は先ずありません。

尚、UTF-8コードもユニコードですので、JIS第一水準・第二水準を逸脱している文字が含まれていても機種依存になりません。

  • 丸数字やローマ数字なども機種依存でなくなります。
  • 一部の独自文字や外字はUTF-8を撰んで保存しても機種依存です。

特に丸数字やローマ数字など、シフトJISコードや日本語EUCなどでは機種依存となるような文字を使いたい場合には、ANSI以外のいずれかを指定するようにしましょう。

参考 2・オンラインエディタの場合。

ジオシティズなど一部のホスティングサーヴィスではオンラインでHTML文書を編集する機能が用意されておりますが、これらを用いる場合、使用されるエンコーディングはオンラインエディタ側の基準となります。

オンラインエディタを利用してウェブ文書を作成する際には、必ず事前にどのエンコーディングで保存されるかを確認して下さい

  • 多くの場合、日本語EUCで保存される事が多いようですが、最近ではUTF-8コードで保存するオンラインエディタも出ているようです。ですから、必ず事前に保存エンコーディングの確認を行なってから利用するようにして下さい。
  • 参考までに、ジオシティズで提供しているアドヴァンストエディタでは日本語EUCで保存する事となっております。

HTML文書で文字コードを指定するには。

HTML文書に使われているエンコーディングを指定するのは、本来なら文書を配信するウェブサーヴァの役目です。

ですが、

ウェブサーヴァが文書のエンコーディングを指定してくれない場合が多い
サーヴァの設定をサイトの管理者が行なえれば問題なくサーヴァでの指定が可能ですが、ホスティングサーヴィスに依ってはそれが出来ない場合が多くなっております。
  • 特に無償サーヴァではそのような設定は先ず出来ません。
ローカルで利用する文書ではサーヴァに依るエンコーディング指定そのものが出来ない
或いはウェブからローカルで保存したHTML文書を開く場合にも同様の事が言えます。

と言う問題があるため、HTML文書内でエンコーディングを指定する事となります。

HTML文書でエンコーディングを指定するには、<meta>要素を用います。

<meta>要素でのエンコーディング指定。

HTML 5 文書でのエンコーディングを指定するには、<meta>要素charset 属性で指定します。

具体的には、以下のようになります。

<meta charset="エンコーディング名">

注意すべき事は、この指定は日本語文字が現れる前に行なわなければならないと言う事です。

日本語文字が現れる前にこの指定がないと、指定される前に現れた日本語文字がどのエンコーディングで書かれたのかを認識する事が出来なくなってしまうからです。

日本語文書でのエンコーディング名。

日本語文書の場合、指定され得るエンコーディングには以下のものがあります。

  • いずれも大文字小文字は問いません。
shift_jis
シフトJISコード
  • shift-jis(区切りがアンダスコアではなくハイフンになっている)としてはいけません。
euc-jp
日本語EUC
iso-2022-jp
ISO-2022-JP(JISコード)
utf-8
UTF-8コード
utf-16
UTF-16コード

余談・他の言語のエンコーディング。

余談になりますが、日本語以外の言語についても幾つか解説しておきましょう。

ラテン文字を用いた言語
英語, 独語, 仏語, 西語など、ラテン文字を用いた言語についてはISO-8859-1コードが用いられます。

ISO-8859-1コードはアスキィコードを拡張して英語では用いられないラテン文字(アクサン記号が付いたアルファベットなど)を定義したものです。

このため、アスキィ文字のみの英語文書を作成すると自動的にISO-8859-1コードで記述した事になります。

中国語
中国語ではBig 5(繁体字)またはGB(ケーペー)2312(簡化字)が使われます。
  • 繁体字は台湾及びホンコンで、簡化字は大陸及びシンガポールで採用されております。
  • 尚、簡化字のコードであるGB2312は、簡化字中国語EUC(EUC-CN)と呼ばれる事もあります(本質的にはGB2312は文字コードの規格であり、EUC-CNはエンコーディングの規格なので別物なのですが、インターネットの世界ではしばしば同一視されております)。
韓国語
韓国語では韓国語EUCが使われます。

勿論、いずれの言語でもUTF-8コード, UTF-16コード及びUTF-32コードを使う事も出来ます。

  • 上記のユニコード以外のエンコーディングは、日本語で言えばシフトJISコードなどに対応するコードと考えれば良いでしょう。