XMLの文字コード (第1回 文字セットと文字コード)

XMLで使用する文字セットと文字コード

XMLで使用する「文字セット」は、Unicodeです。

XMLを記述したテキストファイルの「文字コード」は任意ですが、使用する文字コード名を宣言する必要があります。

例: <?xml version="1.0" encoding="SHIFT_JIS"?>

文字コードが宣言されていないXMLは、文字コードがUTF-8またはUTF-16で記述されているとみなされます(自動判別)。

では、「文字セット」がUnicodeで「文字コード」が任意とはどういうことでしょうか。

以降では、XMLの話題から離れ、「文字セット」と「文字コード」の違いについて説明します。

文字セットとは

文字セットとは、使用可能な文字の一覧と、各文字の識別番号を定めたものです。

世界各国は、自国の言語をコンピューター上で表現するための独自の文字セットを定義しています。

同じ識別番号でも、文字セットが異なれば、異なる文字を表します。(同じ文字番号でも、国により表す文字が異なります。)

文字コードとは

文字コードとは、文字セット内の文字を特定するためのデータ(バイト列)のことです。

多くの場合、文字コードは、特定の文字セット中の文字の識別番号を表しています。

文字コードを並べたものが「テキストファイル」になります。

文字のデータ化の手法を、「エンコーディング」と呼びます。

文字コードは、次の相反する要求を満たす必要があります。

  • テキストファイルのサイズが小さい
  • プログラムが処理しやすい

どちらに重点を置くか(あるいは、バランスのとり方)により、様々な文字コードが考案されています。

文字セットと文字コードの区別の重要性

アルファベットを使う国では、文字セットと文字コードの区別は重要ではありません。

文字セット内の文字が少なく、文字の識別番号が1バイトで表せるため、文字の識別番号をそのまま文字コードとすることができるからです。

1バイトの文字コードは、テキストファイルのサイズを小さくするという要求と、プログラムが処理しやすいという要求を同時に満たします。

米国では、ASCII (American Standard Code for Information Interchange) という規格で、文字セットと文字コードを同時に定義しています。

一方で、日本などの漢字を使う国においては、文字セットと文字コードの区別は重要です。

文字セット内の文字数が多く、1文字を複数バイトの文字コードで表す必要があり、その表し方にバリエーションがあるためです。

JISが定義する文字セット

JISは複数の文字セットを定義しており、文字セットと文字コードの関係を複雑にしています。

JISが定義している文字セットは次のとおりです。

JIS X 0201 (情報交換用符号化文字集合)

ISO標準文字セットに基づいて制定された文字セットです。

次の二次的な文字セットを定義しています。

ラテン文字用図形文字集合

ASCIIと互換性がある、英数字用の文字セットです。 (96文字)

片仮名用図形文字集合

片仮名と日本語用の記号を集めた文字セットです。 (64文字)

JIS X 0208 (情報交換用符号化漢字集合)

漢字を含む、日本独自の文字セットです。(6,879文字)

常用漢字表に基づく「第1水準」と、人名/地名用の「第2水準」で構成されています。

JIS X 0201との併用ではなく、独立して使用することを想定しています。そのため、漢字以外の文字も含まれており、JIS X 0201と重複する文字が存在します。

JIS X 0212 (情報交換用漢字符号-補助漢字)

JIS X 0208に収録されていない漢字を集めた文字セットです。(6,067文字)

JIS X 0208と併用することを想定しており、JIS X 0208と重複する文字はありません。

一般には使用されない古い漢字が多く収録されており、歴史的文書の電子化等で使われます。

JIS X 0213 (情報交換用符号化拡張漢字集合)

JIS X 0208の改訂版で、「第3水準」「第4水準」漢字が追加されています。(11,233文字)

JIS X 0208の文字をすべて含み、JIS X 0208と互換性があります。

JIS X 0212との互換性はなく、JIS X 0212との併用は推奨されません。

JIS X 0221 (国際符号化文字集合)

Unicode (ISO/IEC 10646) をJISが追認した規格です。

内容はUnicodeと完全に同じです。

日本語用の文字コード

日本では、Unicode (ISO/IEC 10646、JIS X 0221) を使用する場合を除き、複数の文字セットを同時に使用する必要があります。

それぞれの文字セットには同じ識別番号を持つ文字が存在しますが、文字セットごとに異なる文字を表しています。

同じ識別番号の異なる文字を区別するため、様々な文字コードが考案されました。

ISO-2022-JP

ISO標準に基づきJISで定められた文字コードで、「JISコード」とも呼ばれます。

テキスト中に文字セットを切り替える特殊コードを埋め込むことで、JIS X 0201(ASCII互換、片仮名)とJIS X 0208(漢字)の文字を同じテキスト内で使用することができます。

1980年代までは、日本語を表現できる唯一の文字コードでした。

プログラムでの取り扱いが難しいことから、最近はほとんど使われません。(電子メールでは現在も使われています。)

Shift JIS

日本Microsoftが考案した文字コードです。

JIS X 0201(ASCII互換、片仮名)とJIS X 0208(漢字)を合体して1個の文字セットとして扱い、重複しない文字番号を付与したものです。
(文字番号が重ならないようにするために、JIS 0208の文字番号をずらしたことから、Shift(ずらした) JISという名称になりました。)

切り替えコードがないのでプログラムで扱いやすく、日本語PCの標準的な文字コードとなりました。

JIS文字セットに特化したした文字コードで、日本語以外には使えません。

2004年に、JIS X 0213に対応しました。

EUC (Extended UNIX Code)

ISO標準方式に改良を加えた文字コードで、日本語以外でも使えます。

複数の文字セットを切り替えて表現しますが、バイトの最上位ビットを文字セット識別ビットとすることで、切り替えコードの使用頻度が少なくなっています。

日本語以外では切り替えコードが不要ですが、日本語では半角カタカナを使用する場合に切り替えコードが必要です。

現在はUnix/Linuxでのみ使用されています。