文字コードとエンコーディング (1)

前へ << バッファリング 文字コードとエンコーディング (2) >> 次へ

文字集合とエンコーディング

本当は機種依存文字と半角カナについてのお話をしたいのですが、 その基礎知識として、コンピュータにおける文字や日本語の扱い方を解説します。

という名前を聞いた方も多いと思います。

また、ISO-2022-JP とか JIS X 0208、JIS X 0201 とかのワケのわからん名称も よく見かけます。このあたりを「文字集合」と「エンコーディング」の 2つの観点から説明します。

文字集合とは

文字の集合です…そのまんまやんけ。 例えば我々日本人が使う文字は何でしょうか。 まずは日本語固有の「ひらがな・かたかな・漢字」があげられます。 しかしアルファベットも使いたいでしょうし、数字や各種記号 (~!@#$など) も はずせません。

さらに日本語も使うけど、ハングル文字も表示したいなんて人もいるでしょう。 こういうふうに考えていくと、世界中のあらゆる文字を考えなくては いけません。きりがありませんね。

ですから、文字を分類しましょう。

その1つ1つのグループのことを文字集合と言います。

そしてグループごとに固有の名前を付けます。

というふうに。 例えば JIS X 0208 では、 と決まっています。このリストに載っていない文字は (JIS X 0208の範囲内では) 扱えないということです。
なお、ここでの JIS X 0208 の「JIS」というのは、いわゆる「JISコード」とは 全く違う概念です。詳しくは次節で解説します。
日本でよく使われる文字集合は、 などがあります。

エンコーディングとは

エンコーディングとは、複数の文字集合を同時に扱うための枠組のことです。 文字集合は「〜の文字の番号は〜番です」と定義されているだけで、 他の文字集合と同時に扱う場合のことは考えられていません。

たとえば、ASCII と JIS X 0208 を同時に扱う場合を考えてみましょう。

仮に ASCII コードでは「A」の番号が10番だとします。 仮に JIS X 0208 コードでは「あ」の番号が10番だとします。

「A」と「あ」の番号は重なっているため、10という番号が出てきたとき 「A」なのか「あ」なのかを判断できません。これを判断できるようにするためには、

という2通りの対策が考えられます。さらに、 という細かな規格を決める必要があります。

このような、複数の文字集合を同時に扱うための規則のことを「エンコーディング」と呼びます。

エンコーディングには、主に3種類あります。ISO-2022-JP と Shift_JIS と EUC-JP です。

ISO-2022-JP (JIS) エンコーディング

JIS というのは正式には ISO-2022-JP と言い、 ASCII・JIS X 0201 の一部・JIS X 0208 を扱うことができます。 ASCII・JIS X 0201・JIS X 0208 を判別するために、 「ここから ASCII」「ここから JIS X 0201」「ここから JIS X 0208」 という区切りの情報を入れます。具体的には、 というエスケープシーケンスを使います。
[ESC] は、0x1B (16進数) というコントロールコードです。
例えば、「abcあいう!@漢字」という文字列を ISO-2022-JP で表現すると、

61 62 63 1B 24 42 24 22 24 24 24 26 1B 28 42 21 40 1B 24 42 34 41 3B 7a
a b c JIS X 0208 へ切り替え ASCII へ切り替え ! @ JIS X 0208 へ切り替え

となります (それぞれ16進数です)。

ISO-2022-JP では最上位ビットは必ず 0 になります。 つまり 7bit で収まるわけです。文字コードは \0x00〜\0x7f の範囲内になります。

アメリカで生まれたメールやネットニュースは、 基本的には ただの文字転送用プログラムです。 しかしアメリカでは 7bit コードである ASCII コードしか 使われていなかったので、8bit 目が立っていると 誤作動する可能性がありました。

そのため日本語を 7bit で表現できる ISO-2022-JP が生まれたわけです。 今でもメールやネットニュースでは ISO-2022-JP を使うことになっています (メールで Shift_JIS や EUC-JP を送ってはダメなのです)。

ISO-2022-JP では JIS X 0201 の右半面、つまり半角カナは扱えません。 メールやネットニュースで半角カナを使ってはいけないと言われるのは、 ISO-2022-JP で半角カナを扱えないからです。

Shift-JIS (SJIS) エンコーディング

Shift_JIS というのは、Microsoft が独自に考案したコードで、 主に MS-DOS や Windows で広く使われています。 ASCII と JIS X 0201 と JIS X 0208 を扱えます。 JIS X 0201 を扱えるということは、いわゆる半角カナを扱うことができるということです。

漢字やひらがななどASCII 以外の文字が必ず (1文字あたり) 2バイトで表現できるという 特徴がありますが、拡張性がないという欠点があります。

EUC-JP (EUC) エンコーディング

EUC (Extentded Unix Code) という名前の通り、主に UNIX で使われてきたコードです。 EUC と言っても、中国語エンコーディングである EUC-TW などもあるので、 EUC 形式の日本語エンコーディングは、正しくは EUC-JP と言います。 EUC-JP は ASCII・JIS X 0201・JIS X 0208・JIS X 0213 を扱えます。 いわゆる半角カナも扱うことができます。

perl や C言語などで日本語を扱う場合は、 EUC-JP を使うのが一番よいでしょう。

前へ << バッファリング 文字コードとエンコーディング (2) >> 次へ

$Id: char-code-1.html,v 1.7 2007/03/07 18:59:22 68user Exp $