ここでは、HTML文書で用いられる文字コードとそのエンコーディングについて解説します。
文字コードとは、その名の通り、コンピュータで取扱う文字に与えられた番号の事です。
コンピュータはあらゆる情報を数値で扱うため、テキストについても文字一個一個に番号を与える事で処理しているのです。
日本語の場合、仮名漢字などについてはJISが区点コードを策定しましたが、これをコンピュータで取扱うための約束事として文字コードの電子的な表現法(エンコーディングと呼びます)が幾つか用意されております。
また、今日ではユニコードと呼ばれる世界共通の文字コードが策定されましたが、これもコンピュータで取扱うためにUTFと呼ばれるエンコーディングが行なわれております。
ISO-2022-JPはしばしばJISコードと呼ばれます。
JISで定められた区点コードを 7ビットに収まるようにデータ化したものです。
このエンコーディングでは、エスケープシークェンスと呼ばれる特別な記号で半角英数字と仮名漢字を切り替えております。
この方法の特徴は、アスキィ文字しか正しく扱えない 7ビット環境でも漢字を含めたデータのやり取りがデータの欠落に依る文字化けを心配せずに出来る事が挙げられます。
このため、古来から日本語電子メールではISO-2022-JPを用いる事とされております。
一方、コンピュータプログラミングでは非常に扱い難いエンコーディングであります。
また、ISO-2022-JPでは半角仮名文字に関する扱いが後になって追加されたため、それに対応していない旧いメールクライアントやブラウザなどで問題が起こる事があり、このため半角仮名文字は使ってはいけない事とされております。
シフトJISコードはウィンドウズ及びマック OS上で日本語を取扱う場合に用いられます。
シフトJISコードでは区点コードを与えられた全角文字を半角文字二文字分( 2オクテット=16ビット)で表す事とされており、一文字目はアスキィ文字及び半角仮名文字と重複しないようなコードが与えられております。
このため、半角仮名文字も問題なくデータとして扱えるようになっております。
シフトJISコードは対応しているOSが多い事から、今も多くの環境で利用されております。
但し、コンピュータプログラミングではシフトJISコードはISO-2022-JP程では無いものの、結構厄介なエンコーディングとなっております。
日本語EUCはユニックス及びユニックス互換のOS(リナックスやフリーBSDなど)で日本語を扱う場合に用いられます。
日本語で用いられる区点コードを持つ全角文字を半角文字二文字分( 2オクテット=16ビット)で表しますが、一文字目・二文字目ともアスキィ文字と重複しない文字コードが割り当てられております。
このため、日本語EUCのデータはコンピュータプログラミングでも問題が起こり難く、日本語EUCは古来からコンピュータプログラミングでは好ましいエンコーディングとされております。
ヤフー・ジオシティズなどのオンラインエディタで作成したHTML文書なども日本語EUCで書き出しますが、これも日本語EUCが取扱い易い事が理由です。
UTF-8コードは世界共通の文字コードであるユニコードをインターネットなどで扱うためのエンコーディングです。
日本語の仮名文字及び漢字(日本語以外で用いられる漢字及び半角カタカナを含む)は一部を除いて半角アスキィ文字三文字分( 3オクテット=24ビット)で表され、一文字目は明らかに仮名や漢字の一文字目と判るエンコーディングとなっており、二文字目以降もやはり複数文字で表される文字の二文字目以降のコードと分かるようになっております。
このため、コンピュータプログラミングでも問題が殆ど起こらないエンコーディングとなります。
また、ユニコードは日本語以外の非英語言語の文字も一緒に扱えるようになっております。
加えてJIS第一水準・第二水準に無い漢字も自由に扱え、他のエンコーディングでは機種依存となるような丸囲み数字やローマ数字なども問題なく記述出来ます。
但し、後発のエンコーディングのため、旧いウェブブラウザなどで文字化けが起こると言う欠点があります。
もっとも、PC向けのウェブブラウザの場合、非対応だったネットスケープ 3.xまでは既にユーザも皆無に近くなっており、携帯電話もUTF-8非対応の旧型機は殆ど使われなくなったので、今では問題にする必要はなくなったようです。
また、日本語文書の場合ファイルサイズがシフトJISコードや日本語EUCの一・五倍になります。
尚、XML(XHTMLのベースとなっているマークアップ言語)ではUTF-8コード及びUTF-16コードを標準のエンコーディングとしており、依ってXHTML文書もUTF-8コードかUTF-16コードのいずれかで書く事が望ましいとされておりますが、シフトJISコードなど他のエンコーディングを使う事を禁止している訳ではありません。
UTF-8コード同様ユニコードをインターネットで扱えるようにしたエンコーディングです。
UTF-8コードやシフトJISコードなどと異なり、一つのデータが16ビット単位( 2オクテット)となるため、他のエンコーディングなら 8ビットで済んだ半角英数字が倍の大きさになってしまい、従って文書サイズが倍になってしまうという事から、好ましいエンコーディングとされてはいるものの殆ど用いられておりません。
従って、ユニコードで書かれたウェブ文書ではUTF-8コードが主流となっております。
但し、日本語文字などではシフトJISコードや日本語EUC同様 2オクテットとなるため、日本語文字が多ければもUTF-8コードより有利になる事もあり得ます。
UTF-8コード及びUTF-16コード同様ユニコードをインターネットで扱えるようにしたエンコーディングです。
UTF-8コードやシフトJISコードなどと異なり、全ての文字が32ビット( 4オクテット)で表されるため、どんな文字であれ他のエンコーディングより大きくなってしまいます。
このような理由から、ウェブ文書では全くと言って良いほど用いられておりません。
実際にテキストエディタを使って文書を作成したとき、どのエンコーディングが使われているかを把握しておく必要があります。
但し、最近ではユニコードが普及しているため、UTF-8コードがデフォルトとなっていたり、UTF-8コードを選択出来るようになっている事も少なくありません。
また、配布されているエディタに依っては、より多くのエンコーディングの選択肢から撰べるようになっているものも決して少なくありません。
使用するテキストエディタに依っては、適切なエンコーディングを撰べるようになるでしょう。
ウィンドウズに標準添付されているテキストエディタ・メモ帳で文書を作製して保存する場合、エンコーディングを選択する事が出来ますが、その扱いは以下のようになります。
日本語環境ではシフトJISコードで保存されます。
但し、JIS第一水準・第二水準を逸脱している文字(特に丸数字やローマ数字など)が含まれている場合は機種依存となりますので注意して下さい。
いずれもUTF-16コードで保存されます。
UTF-16コードにはいくつかの種類があり、その違いが二つのタイプとなっておりますが、当然ながら違いは簡単に判別出来るようになっているのでどちらを用いても問題はありません。
また、UTF-16コードはユニコードですので、JIS第一水準・第二水準を逸脱している文字が含まれていても機種依存になりません。
UTF-8コードで保存されます。
但し、ウィンドウズのメモ帳の場合、UTF-8を撰んで保存するとファイルの冒頭にBOM(バイトオーダマーク)と呼ばれる特殊符号が入ります。
尚、UTF-8コードもユニコードですので、JIS第一水準・第二水準を逸脱している文字が含まれていても機種依存になりません。
特に丸数字やローマ数字など、シフトJISコードや日本語EUCなどでは機種依存となるような文字を使いたい場合には、ANSI以外のいずれかを指定するようにしましょう。
ジオシティズなど一部のホスティングサーヴィスではオンラインでHTML文書を編集する機能が用意されておりますが、これらを用いる場合、使用されるエンコーディングはオンラインエディタ側の基準となります。
オンラインエディタを利用してウェブ文書を作成する際には、必ず事前にどのエンコーディングで保存されるかを確認して下さい。
HTML文書に使われているエンコーディングを指定するのは、本来なら文書を配信するウェブサーヴァの役目です。
しかしながら、
サーヴァの設定をサイトの管理者が行なえれば問題なくサーヴァでの指定が可能ですが、ホスティングサーヴィスに依ってはそれが出来ない場合が多くなっております。
或いはウェブからローカルで保存したHTML文書を開く場合にも同様の事が言えます。
と言う問題があるため、補助的にHTML文書内でエンコーディングを指定する事となります。
HTML文書でエンコーディングを指定するには、
の二つがあります。
です。
XHTMLの場合、後者の方法だけで良いのですが、在来のHTMLの代わりにXHTMLを用いる場合には前者の方法も併用する必要があります。
在来HTMLでマークアップされた文書及びXHTMLを在来HTMLの代わりに利用する場合には<meta>要素で文書の型とエンコーディングを指定します。
<meta http-equiv="content-type" content="text/html; charset=エンコーディング名">
<meta http-equiv="content-type" content="text/html; charset=エンコーディング名" />
注意すべき事は、この指定は日本語文字が現れる前に行なわなければならないと言う事です。
日本語文字が現れる前にこの指定がないと、日本語文字がどのエンコーディングで書かれたのかを認識する事が出来なくなってしまうからです。
XHTMLでマークアップされた文書ではxml宣言で文書の型とエンコーディングを指定します。
正確には、UTF-8またはUTF-16で書かれた文書であれば省略出来るのですが、原則として記述する事が求められております。
<?xml version="1.0" encoding="エンコーディング名"?>
尚、xml宣言は文書の冒頭に記述されなければなりません。
xml宣言の直前には空白や改行と言えども一切文字が入ってはいけません。
日本語文書の場合、指定され得るエンコーディングには以下のものがあります。
shift_jisshift-jis(区切りがアンダスコアではなくハイフンになっている)としてはいけません。euc-jpiso-2022-jputf-8utf-16utf-32余談になりますが、日本語以外の言語についても幾つか解説しておきましょう。
英語, 独語, 仏語, 西語など、ラテン文字を用いた言語についてはISO-8859-1コードが用いられます。
ISO-8859-1コードはアスキィコードを拡張して英語では用いられないラテン文字(アクサン記号が付いたアルファベットなど)を定義したものです。
このため、アスキィ文字のみの英語文書を作成すると自動的にISO-8859-1コードで記述した事になります。
中国語ではBig 5(繁体字)またはGB2312(簡化字)が使われます。
勿論、いずれの言語でもUTF-8コード, UTF-16コード及びUTF-32コードを使う事も出来ます。