前へ << バッファリング | 文字コードとエンコーディング (2) >> 次へ |
本当は機種依存文字と半角カナについてのお話をしたいのですが、 その基礎知識として、コンピュータにおける文字や日本語の扱い方を解説します。
という名前を聞いた方も多いと思います。
- JIS コード
- Shift_JIS コード
- EUC-JP コード
また、ISO-2022-JP とか JIS X 0208、JIS X 0201 とかのワケのわからん名称も よく見かけます。このあたりを「文字集合」と「エンコーディング」の 2つの観点から説明します。
文字の集合です…そのまんまやんけ。 例えば我々日本人が使う文字は何でしょうか。 まずは日本語固有の「ひらがな・かたかな・漢字」があげられます。 しかしアルファベットも使いたいでしょうし、数字や各種記号 (~!@#$など) も はずせません。さらに日本語も使うけど、ハングル文字も表示したいなんて人もいるでしょう。 こういうふうに考えていくと、世界中のあらゆる文字を考えなくては いけません。きりがありませんね。
ですから、文字を分類しましょう。
その1つ1つのグループのことを文字集合と言います。
- 「アルファベット・記号」で1つのグループ
- 「ひらがな・かたかな・漢字」で1つのグループ
- 「ハングル文字」で1つのグループ
- …
そしてグループごとに固有の名前を付けます。
というふうに。 例えば JIS X 0208 では、
- 「アルファベット・数字・記号」グループは「ASCII コード」という名前を付ける
- 「ひらがな・かたかな・漢字」グループは「JIS X 0208」という名前を付ける
と決まっています。このリストに載っていない文字は (JIS X 0208の範囲内では) 扱えないということです。
- 「あ」という文字の番号は〜番です。
- 「い」という文字の番号は〜番です。
- 「漢」という文字の番号は〜番です。
なお、ここでの JIS X 0208 の「JIS」というのは、いわゆる「JISコード」とは 全く違う概念です。詳しくは次節で解説します。日本でよく使われる文字集合は、などがあります。
- ASCII … 半角英数字・半角記号 (a,A,0,!,@,# など)
- JIS X 0201 … 半角英数字・半角カナ
- JIS X 0208 … ひらがな・カタカナ・漢字・全角記号
- JIS X 0212 … 補助漢字
エンコーディングとは、複数の文字集合を同時に扱うための枠組のことです。 文字集合は「〜の文字の番号は〜番です」と定義されているだけで、 他の文字集合と同時に扱う場合のことは考えられていません。たとえば、ASCII と JIS X 0208 を同時に扱う場合を考えてみましょう。
仮に ASCII コードでは「A」の番号が10番だとします。 仮に JIS X 0208 コードでは「あ」の番号が10番だとします。
「A」と「あ」の番号は重なっているため、10という番号が出てきたとき 「A」なのか「あ」なのかを判断できません。これを判断できるようにするためには、
という2通りの対策が考えられます。さらに、
- 1.「A」はそのままだけど、「あ」の番号を加工して「A」と重ならないようにする
- 2.「A」も「あ」も番号は変えずに、区切りごとに特別なコード、 たとえば「ここから先は ASCII」「ここから先は JIS X 0208」という意味の、区切り用のコードを入れる。
という細かな規格を決める必要があります。
- 1 ならば、どういうふうに「あ」を加工するのか
- 2 ならば、どういう区切りのコードを入れるのか
このような、複数の文字集合を同時に扱うための規則のことを「エンコーディング」と呼びます。
エンコーディングには、主に3種類あります。ISO-2022-JP と Shift_JIS と EUC-JP です。
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] ( B … ASCII
- [ESC] ( J … JIS X 0201 ローマ字
- [ESC] $ @ … 旧 JIS
- [ESC] $ B … 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 というのは、Microsoft が独自に考案したコードで、 主に MS-DOS や Windows で広く使われています。 ASCII と JIS X 0201 と JIS X 0208 を扱えます。 JIS X 0201 を扱えるということは、いわゆる半角カナを扱うことができるということです。漢字やひらがななどASCII 以外の文字が必ず (1文字あたり) 2バイトで表現できるという 特徴がありますが、拡張性がないという欠点があります。
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 $