A    文字コード

この章では Tru64 UNIX の日本語機能を使用して処理することができる漢字コードについて解説します。 また,複数の漢字コードを処理するために導入された,端末コードとアプリケーション・コードの概念についても解説します。

A.1    文字セット

文字とコードの対応の集合を文字セット(character set) と呼びます。 JIS では 表 A-1 のように文字セットを規定しています。 これらに含まれる文字は 1,あるいは 2 バイトの文字コードで表します。 文字の各バイトは 7 ビットだけが使用され,最上位ビット(MSB)は 0(ゼロ)になって います。

表 A-1:  JIS による文字セットの分類

分類 JIS の規格番号 文字コード
JIS ローマ字 JIS X 0201 LH 0xxxxxxx
JIS 片仮名 JIS X 0201 RH 0xxxxxxx
JIS 漢字 JIS X 0208 [脚注 29] 0xxxxxxx 0xxxxxxx
JIS 補助漢字 JIS X 0212 0xxxxxxx 0xxxxxxx

この他,ANSI(米国規格協会) が定めた1バイトの文字コードであるASCII 文字セットも日本で広く使用されています。 ASCII 文字セットは,JIS X 0201 LH とほぼ同じですが, 表 A-2 の2つのコードに割り当てられた図形文字が異なります。

表 A-2:  ASCII と JIS X 0201 LH

文字コード ASCII JIS X 0201 LH
0x5c バックスラッシュ(\) 円記号(¥)
0x7e チルダ( ~ ) オーバーライン( ̄)

これらの文字セットを複数まとめたものをコードセット(code set) と呼びます。 しかしこのままでは,異なる文字セットに属する文字コードが重なり合うために文字とコードを一意に対応づけることができません。 このため,コードセットに含まれる文字セットに対して何らかの符号拡張が必要になります。

ISO(国際標準化機構) は各国に共通な文字コードの体系を定めた ISO 2022 を定めています。 JIS(日本工業規格)は ISO 2022 を翻訳し,それを JIS X 0202 としました。 JIS X 0202 に基づき符号拡張したコードセットのうち主なものをあげます。

また JIS X 0202 に基づかずに,日本独自の符号拡張を行なったコードセットとして次のものがあります。

それぞれのコードセットで利用できる文字セットを 表 A-3 に示します。

表 A-3:  各コードセットで利用できる文字セット

コードセット ASCII または JIS X 0201 LH JIS X 0201 RH JIS X 0208 JIS X 0212
7単位系 JIS
7単位系 JIS
8単位系 JIS
日本語 EUC コード
DEC 漢字コード
Super DEC 漢字コード
シフト JIS

各 JIS 規格の詳細は,それぞれの『JIS 規格票』を参照してください。

また,ISO は世界中の文字を 1 つのコードセットで表現する Universal Character Set (UCS) を ISO/IEC 10646 で定義しています。 JIS では,ISO/IEC 10646 を翻訳して JIS X 0221 を定義しています。

ISO/IEC 10646 に基づき,Tru64 UNIX では次のエンコーディングをサポートします。

A.1.1    7単位系 JIS 漢字コードセット

JIS X 0201 LH,JIS X 0201 RH,JIS X 0208,JIS X 0212 の各文字セットに含まれるすべての文字を7ビットの文字コードに符号化するコードセットです。 本書では以後,7-bit JIS コードと呼びます。

表 A-4:  7-bit JIS コードセットの文字コード

文字セット 文字コード
JIS X 0201 LH 0xxxxxxx
JIS X 0201 RH 0xxxxxxx
JIS X 0208 0xxxxxxx 0xxxxxxx
JIS X 0212 0xxxxxxx 0xxxxxxx
C0 制御文字 000xxxx

表 A-4 のようにコード化された文字は他の文字のコードと重なるため,一意に識別することができません。 そこで 7-bit JIS コードでは,JIS X 0202 に規定されている符号拡張を使用して状態 (state) を持つことでそれぞれの文字を識別します。

漢字イン・シーケンス(指定省略時の設定では "ESC $ B")から後ろに現れたコードは,JIS X 0208 の漢字文字として,漢字アウト・シーケンス(指定省略時の設定では "ESC ( B")から後ろに現れたコードは,ASCII の文字として処理します。 補助漢字イン・シーケンス(指定省略時の設定では "ESC $ ( D")から後ろに現れたコードは,JIS X 0212 補助漢字として処理し,漢字アウト・シーケンス(指定省略時の設定では "ESC ( B")から後ろに現れたコードは,ASCII の文字として処理します。 また,SO(0x0e)から SI(0x0f)までの間のコードは,JIS X 0201 RH のカタカナ文字として処理します。 JIS X0201 RH のカタカナ文字を表現するために,SO(0x0e)および SI(0x0f)を使用する代わりに,カナ・イン・シーケンス("ECS ( I ")を使用する方法もあります。

注意

7-bit JIS コードセットは,端末コードとして使用することはできますが,ロケール名の指定に使用することはできません。

7-bit JIS コードについての詳細は,日本語リファンレンス・ページの JIS7(5) を参照してください。

A.1.2    8単位系 JIS 漢字コードセット

JIS X 0201 LH, JIS X 0208, JIS X 0212 の各文字セットに含まれるすべての文字を7ビットの文字コードに符号化し,JIS X 0201 RH 文字セットに含まれる文字は8ビットの文字コードに符号化するコードセットです。 本書では以後,8-bit JIS コードと呼びます。 8-bit JIS コードの文字の符号化は,表 A-5 のようになります。

表 A-5:  8-bit JIS コードセットの文字コード

文字セット 文字コード
JIS X 0201 LH 0xxxxxxx
JIS X 0201 RH 1xxxxxxx
JIS X 0208 0xxxxxxx 0xxxxxxx
JIS X 0212 0xxxxxxx 0xxxxxxx
C0 制御文字 000xxxx

漢字イン・シーケンス(指定省略時の設定では "ESC ( B")から後ろに現れたコードは,JIS X 0208 の漢字文字として,漢字アウト・シーケンス(指定省略時の設定では "ESC $ B")から後ろに現れたコードは,ASCII の文字として処理します。 補助漢字イン・シーケンス(指定省略時の設定では "ESC $ ( D")から後ろに現れたコードは,JIS X 0212 補助漢字として処理し,漢字アウト・シーケンス(指定省略時の設定では "ESC $ B")から後ろに現れたコードは,ASCII の文字として処理します。 MSB が 1 であるデータは,JIS X 0201 RH のカタカナ文字として処理されます。 また 7-bit JIS で使用される SI と SO は無視されます。

注意

8-bit JIS コードセットは,端末コードとして使用することはできますが, ロケール名の指定に使用することはできません。

8-bit JIS コードについての詳細は,日本語リファレンス・ページの JIS8(5) を参照してください。

A.1.3    日本語 EUC コードセット

EUC(Extended UNIX Code)は,AT&T 日本語UNIXシステム諮問委員会から 1985 年に提案された「UNIX システム日本語機能提案書」の中で定義された日本語用 UNIX 内部コード体系をもとに,AT&T ベル研究所で世界各国で使用可能となるように拡張したコード体系です。 この EUC を日本語に適用したコードセットを, 日本語 EUC コードセット と呼びます。

EUC は CS0,CS1,CS2,CS3 の4つのコードセットを持ちます。

日本語 EUC コードセットの文字の符号化は, 表 A-6 のようになります。

表 A-6:  日本語 EUC の文字コード

コードセット 対応する文字セット 符号化
CS0 ASCII 0xxxxxxx
CS1 JIS X 0208 1xxxxxxx 1xxxxxxx
CS2 JIS X 0201RH

    SS2    1xxxxxxx

CS3 JIS X 0212

    SS3    1xxxxxxx 1xxxxxxx

C0 制御文字   000xxxxx
C1 制御文字   100xxxxx

JIS X 0208 と JIS X 0212 の未定義領域のうち,次の領域をベンダやユーザが定義するユーザ定義文字領域として割り当てることができます。

注意

JIS X 0212 の未定義領域の 78 区から 84 区までは,JIS が将来の拡張のために確保している領域です。 したがって将来,JIS がこの領域に文字を割り当てることがあれば,ユーザが定義した文字と衝突する可能性があります。

日本語 EUC コードセットについての詳細は,日本語リファレンス・ページの eucJP(5) を参照してください。

A.1.4    DEC 漢字コードセット

DEC 漢字コードは,以下の文字セットから構成されるコードセットです。

ASCII 文字,あるいは JIS X 0201 LH は1バイトの文字コードで表します。 バイトの MSB は必ず0(ゼロ)となっています。

DEC 漢字文字セット 1990 年版は 表 A-7 のように, JIS X 0208-1990 の非漢字,第 1 水準漢字,第 2 水準漢字の 6,879 文字から構成されます。 1 文字は 2 バイトで表され,各バイトの MSB は必ず 1 となっています。 DEC 漢字文字セット 1990 年版の区点番号は,JIS X 0208-1990 の区点番号と同じです。

表 A-7:  DEC 漢字文字セット 90 年版

区番号 割り当て 文字数
1 区 から 8 区 非漢字文字 [脚注 30] 524 文字
9 区 から 15 区 JIS 保留領域  
16 区 から 47 区 第1水準漢字 2,965 文字
48 区 から 84 区 第2水準漢字 3,390 文字
85 区 から 94 区 JIS 保留領域  

DEC 漢字コードセットでは,DEC 拡張漢字文字セットのユーザ定義領域として,8,836 文字のユーザ定義文字のコードを割り当てることができます。 拡張文字セットに属する文字は1バイト目の MSB が1で,2バイト目の MSB が0(ゼロ)である2バイトのデータとして表されます。 この中で 32 区から 94 区までは,HP が確保している領域です。 したがって,ユーザが定義した外字は DEC 拡張漢字文字セットの 1 区から 31 区までの領域に割り当てることができます。

DEC 漢字コードの文字コードは 表 A-8 のようになっています。

表 A-8:  DEC 漢字コードの文字コード

文字セット 文字コード
ASCII あるいは JIS X 0201 LH 0xxxxxxx
JIS X 0208 1xxxxxxx 1xxxxxxx
DEC 拡張漢字文字セット 1xxxxxxx 0xxxxxxx
C0 制御文字 000xxxxx
C1 制御文字 100xxxxx

DEC 漢字コードについての詳細は,『漢字コード表』および日本語リファレンス・ページの deckanji(5) を参照してください。

A.1.5    Super DEC 漢字コードセット

Super DEC 漢字コードセットは,DEC 漢字コードセットを拡張して,日本語 EUC の CS2 と CS3 を扱えるようにしたコードセットです。

Super DEC 漢字コードセットは,以下の文字コードセットから構成されます。

ASCII あるいは JIS X 0201 LH,DEC 漢字文字セット 1990 年版, DEC 拡張漢字文字セット,はそれぞれDEC 漢字コードセットと同じように 符号化されます。

JIS X 0201 RH に属する文字は SS2(0x8e) に続く1バイトの文字データで 表します。このバイトの MSB は必ず1になっています。

JIS X 0212-1990 に属する文字は SS3(0x8f) に続く2バイトの文字データで表します。 各バイトの MSB は必ず1になっています。

Super DEC 漢字コードの文字コードは 表 A-9 のようになっています。

表 A-9:  Super DEC 漢字の文字コード

文字セット 文字コード
ASCII あるいは JIS X0201 LH 0xxxxxxx
JIS X0208 1xxxxxxx 1xxxxxxx
DEC 拡張漢字文字セット 1xxxxxxx 0xxxxxxx
JIS X0201 RH

    SS2    1xxxxxxx

JIS X0212

    SS3    1xxxxxxx 1xxxxxxx

C0 制御文字 000xxxxx
C1 制御文字 100xxxxx

また Super DEC 漢字コードセットでは 表 A-10 のように,DEC 拡張漢字文字セット および JIS X 0208,JIS X 0212 の未定義領域にユーザ定義の外字を割り当てることができます。

表 A-10:  Super DEC 漢字におけるユーザ定義文字領域

文字セット 割り当て可能な領域
JIS X 0208 85 区から 94 区
JIS X 0212 78 区から 94 区
DEC 拡張漢字文字セット 1 区から 94 区まで

Super DEC 漢字コードについての詳細は,日本語リファレンス・ページの sdeckanji(5)を参照してください。

A.1.6    シフト JIS コードセット

シフト JIS コードセットは,パーソナル・コンピュータの世界で広く使用されている漢字コードです。各文字セットは 表 A-11 のように符号化されています。

表 A-11:  シフト JIS コードの符号化

C0 制御文字 0x00 から 0x1f
Space 0x20
JIS X 0201 LH 0x21 から 0x7e
Del 0x7f
未定義 0x80
JIS X 0208 漢字の 1 バイト目 0x81 から 0x9f
未定義 0xa0
JIS X 0201 RH 0xa1 から 0xdf
JIS X 0208 漢字の 1 バイト目 0xe0 から 0xef
ユーザ定義文字の 1 バイト目 0xf0 から 0xfc
未定義 0xfc から 0xff

コードと漢字およびユーザ定義文字の区点番号との対応は 表 A-12 のようになっています。

表 A-12:  漢字,ユーザ定義文字の区点との対応

0x8140 . . . 0x819c JIS X 0208 1 区 1 点 . . . 1 区 94 点 (0x817f を除く)
0x819f . . . 0x81fc JIS X 0208 2 区 1 点 . . . 2 区 94 点
0x8240 . . . 0x829e JIS X 0208 3 区 1 点 . . . 3 区 94 点 (0x827f を除く)
0x8140 . . . 0x819c JIS X 0208 4 区 1 点 . . . 4 区 94 点

.
.
.

.
.
.
0x9f9f . . . 0x9ffc JIS X 0208 62 区 1 点 . . . 62 区 94 点 (0x817f を除く)
0xe040 . . . 0xe09e JIS X 0208 63 区 1 点 . . . 63 区 94 点 (0xe07f を除く)

.
.
.

.
.
.
0xef40 . . . 0xef9e JIS X 0208 93 区 1 点 . . . 93 区 94 点 (0x817f を除く)
0xef9f . . . 0xeffc JIS X 0208 94 区 1 点 . . . 94 区 94 点 (0xe07f を除く)
0xf040 . . . 0xf0fc ユーザ定義文字 (0xf07f を除く)

.
.
.

.
.
.
0xfc40 . . . 0xfcfc ユーザ定義文字 (0xfc7f を除く)

シフト JIS コードでは,次の領域にユーザ定義文字を割り当てることができます。

シフト JIS コードについての詳細は,日本語リファレンス・ページの shiftjis(5)を参照してください。

A.1.7    UTF-8

UTF-8 は,世界中の文字を 1 つのコードセットで表現できるように ISO/IEC 10646 で定義された 4 オクテットの UCS-4 と 2 オクテットの UCS-2 を符合化します。 UTF-8 は UCS 交換フォーマットとして可変長コードで表現され,ASCII コードを 1 バイトで表現するとともに,マルチバイトの可変長コード部分に ASCII コードを使用しないように配慮されています。

表 A-13:  UCS-4 のエンコーディング範囲と UTF-8 のビット配列

エンコーディング範囲 (16 進数) UTF-8 オクテット列 (2 進数)
0000 0000-0000 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0020 0000-03FF FFFF 1111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0400 0000-7FFF FFFF 11111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-8 については, Unicode(5) リファレンス・ページを参照してください。