共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)

エンコーディングとコード・セット

コード・セットを理解するには、まず文字セットを理解することが必要です。文字セットは、文字を表すのに使用するエンコーディング値は考慮せずに、1 つ以上の言語の特定のニーズに基づいてあらかじめ定義された文字の集まりです。どのコード・セットを使用するかの選択は、ユーザのデータ処理要件に依存します。特定の文字セットは、異なるエンコーディング・スキーマを使用してエンコードされます。たとえば、ASCII 文字セットは英語の中で見つけられる文字のセットを定義します。JIS (日本工業規格) の文字セットは、日本語で使用される文字のセットを定義します。英語および日本語の文字セットは、両方とも異なるコード・セットを使用してエンコードされます。

ISO2022 標準は、コード化文字セットを、文字セットと、各文字とそのビット・パターンの一対一の関係を定義する細かい規則の集まりとして定義します。コード・セットは、システムが文字を識別するのに使用するビット・パターンを定義します。

コード・ページはコード・セットに似ていますが、コード・ページの仕様は 16 列 * 16 行のマトリクスに基づくという制限があります。各列と行の交わりが、コード化文字を定義します。

コード・セット

共通オープン・ソフトウェア環境のコード・セット・サポートは、ISO (国際標準化機構) と、ユーザのデータ処理ニーズを満たす業界標準のコード・セットを提供する業界標準コード・セットに基づいています。

システム上の各ロケールは、どのコード・セットを使用するか、またそのコード・セット内の文字がどのように処理されるかを定義します。システムには複数のロケールをインストールできるので、複数のコード・セットがシステム上の異なるユーザによって使用されます。システムが複数の異なるコード・セットを使用する複数のロケールで構成される一方、すべてのシステム・ユーティリティはシステムが単一のコード・セットの下で動作していると想定します。

ほとんどのコマンドは、ロケールが使用している下位のコード・セットについては何も知りません。コード・セットの知識は、コード・セットに依存しないライブラリ・サブルーチン (国際化対応ライブラリ) によって隠されています。コード・セットに依存しないライブラリ・サブルーチンは、コード・セット依存サブルーチンに情報を渡します。

多くのプログラムが ASCII に依存しているため、すべてのコード・セットには 7 ビット ASCII コード・セットが適正なサブセットとして含まれています。7 ビット ASCII コード・セットはサポートされているすべてのコード・セットに共通なので、7 ビット ASCII コード・セットの文字はポータブル文字セットと呼ばれることがあります。

7 ビット ASCII コード・セットは ISO646 定義に基づいており、制御文字、句読文字、数字 (0-9)、大文字と小文字の英字のアルファベットが含まれます。

コード・セットの構造

各コード・セットは 2 つの主な領域に分かれます。

各コード・セットの最初の 2 列は、制御文字用に ISO 標準が確保しています。C0 と C1 は、それぞれグラフィック・レフトとグラフィック・ライトの領域用の制御文字を表すのに使用されます。


注 -

PC コード・セットは、グラフィック文字をエンコードするのに C1 コントロール領域を使用します。


残りの 6 列はグラフィック文字をエンコードするのに使用されます (図 3-1 参照)。グラフィック文字は印刷可能な文字と見なされます。制御文字は、デバイスとアプリケーションによって特別な機能を表すために使用されます。

図 3-1 コード・セットの概要

Graphic

制御文字

ISO 定義に基づき、制御文字は動作を開始、変更、停止します。制御文字はグラフィック文字ではありませんが、場合によってはグラフィック表現を持つことができます。ISO646-IRV 文字セットの制御文字は、サポートされているすべてのコード・セット内にあります。C0 制御文字のエンコードされた値は、あらゆるコード・セットを通じて一貫しています。

グラフィック文字

各コード・セットは、各文字に固有のコード値が与えられるように、1 つ以上の文字セットに分かれると考えられます。ISO 標準は 6 つの列を文字のエンコーディングのために確保しており、グラフィック文字を制御文字の列でエンコードできません。

シングルバイト・コード・セット

1 バイトの 8 ビットすべてを使用するコード・セットは、ヨーロッパ、中東その他のアルファベット言語をサポートします。そのようなコード・セットはシングルバイト・コード・セットと呼ばれます。シングルバイト・コード・セットは、文字のエンコーディングを制御文字を除いて 191 文字までに制限しています。

マルチバイト・コード・セット

マルチバイト・コード・セットは、特定の文字をエンコードするのに必要なバイト数に関わらず、すべての可能なコード・セットを指します。オペレーティング・システムは 1 文字をエンコードするのに何ビットでもサポートできるので、マルチバイト・コード・セットには、8 ビット、16 ビット、32 ビット、あるいはそれ以上のビットでエンコードされた文字を含めることが可能です。シングルバイト・コード・セットもマルチバイト・コード・セットと考えられます。

EUC (拡張 UNIX コード) コード・セット

EUC コード・セットは、一部の文字セットの中で文字を識別するのに制御文字を使用します。エンコーディング規則は ISO2022 の 7 ビット・データと 8 ビット・データのエンコーディングの定義に基づいています。EUC コード・セットは一部の文字セットを区切るのに制御文字を使用します。

EUC という用語はそのような一般的なエンコーディング規則を指します。EUC に基づくコード・セットは EUC エンコーディング規則に準拠しますが、特定の場合に関連付けられた特定の文字セットも識別します。たとえば、日本語用 eucJP は EUC エンコーディング規則による JIS 文字のエンコーディングを指します。

最初のセット (CS0) には常に ISO646 文字セットが含まれます。他のすべてのセットは、最上位ビット (MSB) を 1 に設定しなければならず、文字をエンコードするのに何バイトでも使用できます。さらに、1 つのセットの中のすべての文字は次のようでなければなりません。

3 番目のセット (CS2) の各文字の前には、常に制御文字 SS2 (シングルシフト 2、0x8e) が付きます。EUC に準拠するコード・セットは、3 番目のセットを識別する目的以外では制御文字 SS2 を使用しません。

4 番目のセット (CS3) の各文字の前には、常に制御文字 SS3 (シングルシフト 3、0x8f) が付きます。EUC に準拠するコード・セットは、4 番目のセットを識別する目的以外では制御文字 SS3 を使用しません。

ISO EUC コード・セット

次のコード・セットは、ISO (国際標準化機構) により設定された定義に基づいています。

ISO646-IRV

ISO646-IRV コード・セットは、7 ビット・エンコーディングに基づく情報処理に使用されるコード・セットを定義します。このコード・セットに関連付けられた文字セットは ASCII 文字から得られます。

ISO8859-1

ISO8859-1 エンコーディングは、その他の ISO、ANSI (米国規格協会)、ECMA (欧州コンピュータ製造者協会) のコード拡張技術に基づき、それらと互換性のあるシングルバイトのエンコーディングです。ISO8859 エンコーディングは、各メンバが独自の文字セットを持つコード・セットのファミリを定義します。7 ビット ASCII コード・セットは、ISO8859 ファミリの各コード・セットの適切なサブセットです。

ISO8859-1 コード・セットは ISO Latin-1 コード・セットと呼ばれ、2 つの文字セットから成ります。

これらを組み合わせた文字セットには、デンマーク語、オランダ語、英語、フィンランド語、フランス語、ドイツ語、アイスランド語、イタリア語、ノルウェー語、ポルトガル語、スペイン語、スウェーデン語などの西欧諸語に必要な文字が含まれます。

ASCII コード・セットが英語のアルファベット順に順序を定義する一方、GR (グラフィック・ライト) 文字は特定のどの言語によっても順序付けされません。言語固有の順序はロケールによって定義されます。

その他の ISO8859 コード・セット

この節ではその他の重要な ISO8859 コード・セットをリストします。各コード・セットには ASCII 文字とそのコード・セット独自の文字があります。

ISO8859-2

ラテン・アルファベット、No.2、東欧

ISO8859-5

ラテン / キリル・アルファベット

ISO8859-6

ラテン / アラビア語アルファベット

ISO8859-7

ラテン / ギリシャ語アルファベット

ISO8859-8

ラテン / ヘブライ語アルファベット

ISO8859-9

ラテン / トルコ語アルファベット

eucJP

日本語用 EUC はシングルバイト文字とマルチバイト文字 (2 バイトと 3 バイト) から成ります。エンコーディングは ISO2022 に準拠し、JIS および EUC の定義に基づきます。

表 3-2 eucJP のエンコーディング

CS 

エンコーディング 

 

文字セット 

cs0 

0xxxxxxx 

 

ASCII 

cs1 

1xxxxxxx 

1xxxxxxx 

JIS X0208-1990 

cs2 

0x8E 

1xxxxxxx 

JIS X0201-1976 

cs3 

0x8F 

1xxxxxxx 1xxxxxxx 

JIS X0212-1990 

JIS X0208-1990

情報交換用の日本語のグラフィック文字セットのコード (1990 年版) です。この中には特殊文字が 147、数字が 10、ひらがな文字が 83、カタカナ文字が 86、ラテン文字が 52、ギリシャ文字が 48、キリル文字が 66、線描画要素が 32、漢字が 6355 含まれます。

JIS X0201

カタカナを 63 文字含む、情報変換用コードです。

JIS X0212-1990

情報変換用の日本語のグラフィック文字セットの補助コード (1990 年版) です。この中には、追加の特殊文字が 21、追加のギリシャ文字が 21、追加のキリル文字が 26、追加のラテン文字が 27、発音区別符号の付いたラテン文字が 171、追加の漢字が 5801 含まれます。

eucTW

繁体字用 EUC はシングルバイト文字とマルチバイト文字 (2 バイトと 4 バイト) を含む文字から成るエンコーディングです。EUC エンコーディングは、ISO2022 に準拠しており、中華人民共和国によって定義された CNS (Chinese National Standard) および EUC 定義に基づきます。表 3-3 を参照してください。

表 3-3 eucTW のエンコーディング

CS 

エンコーディング 

 

 

文字セット 

cs0 

0xxxxxxx 

 

 

ASCII 

cs1 

1xxxxxxx 

1xxxxxxx 

 

CNS 11643.1992 - plane 1 

cs2 

0x8EA2 

1xxxxxxx 

1xxxxxxx 

CNS 11643.1992 - plane 2 

cs3 

0x8EA3 

1xxxxxxx 

1xxxxxxx 

CNS 11643.1992 - plane 3 

 

0x8EB0 

1xxxxxxx 

1xxxxxxx 

CNS 11643.1992 - Plane 16 

CNS 11643-1992 は、中国標準変換コード用に 16 の面を定義します。各面は、8836 文字 (94 * 94) までサポートできます。現在は、面 1〜7 のみ文字が割り当てられています。表 3-4 は、CNS 11643-1992 標準の 16 の各面を示しています。

表 3-4 CNS 11643-1992 標準の 16 面

面 

定義 

文字数 

EUC エンコーディング 

最も多く使用される 

6085 

A1A1-FDCB 

2 番目に多く使用される 

7650 

8EA2 A1A1 - 8EA2 F2C4 

Exec. Yuen EDP 1センター

6148 

8EA3 A1A1 - 8EA3 E2C6 

RIS 2、ベンダ定義

7298 

8EA4 A1A1 - 8EA4 EEDC 

MOE はほとんど使用しない3

8603 

8EA5 A1A1 - 8EA5 FCD1 

MOE による変形文字セット 1 

6388 

8EA6 A1A1 - 8EA6 E4FA 

MOE による変形文字セット 2 

6539 

8EA7 A1A1 - 8EA7 E6D5 

未定義 

8EA8 A1A1 - 8EA8 FEFE 

未定義 

8EA9 A1A1 - 8EA9 FEFE 

10 

未定義 

8EAA A1A1 - 8EAA FEFE 

11 

未定義 

8EAB A1A1 - 8EAB FEFE 

12 

ユーザ定義文字 (UDC) 

8EAC A1A1 - 8EAC FEFE 

13 

UDC 

8EAD A1A1 - 9EAD FEFE 

14 

UDC 

8EAE A1A1 - 8EAE FEFE 

15 

UDC 

8EAF A1A1 - 8EAF FEFE 

16 

UDC 

8EB0 A1A1 - 8EB0 FEFE 

  1. EDP: 予算、会計、統計の中央理事会

  2. RIS: 居住地情報システム

  3. MOE: 文部省

eucKR

韓国語用 EUC は、シングルバイト文字とマルチバイト文字から成るエンコーディングです (表 3-5 参照)。エンコーディングは ISO2022 に準拠し、KSC (韓国語標準コード) セットと EUC 定義に基づきます。

表 3-5 eucKR のエンコーディング

CS  

エンコーディング 

 

文字セット 

cs0 

0xxxxxxx 

 

ASCII 

cs1 

1xxxxxxx 

1xxxxxxx 

KS C 5601-1992 

cs2 

 

 

使用しない 

cs3 

 

 

使用しない 

KSC 5601-1992 (1992 年度版情報変換用韓国語文字セットのコード) には、特殊文字が 432、アラビア数字およびローマ数字が 30、ハングル・アルファベットが 94、ローマ文字が 52、ギリシャ文字が 48、ラテン文字が 27、日本語の文字が 169、ロシア文字が 66、線描画要素が 68、あらかじめ作成されたハングルが 2344、ハンジャが 4888 含まれます。

1 つのハングル文字は子音と母音から成ります。ハングルのほとんどの単語はハンジャの単語でも表現できます。ハンジャは繁体字のセットであり、現在韓国語圏の人々に使用されています。各ハンジャには意味があるので、ほとんどの場合ハングルよりも明確です。