この章では Tru64 UNIX の日本語機能を使用して処理することができる漢字コードについて解説します。 また,複数の漢字コードを処理するために導入された,端末コードとアプリケーション・コードの概念についても解説します。
文字コード
端末コードとアプリケーション・コード
プリンタ・コード
ファイル・コードの変換
文字とコードの対応の集合を文字セット(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 に基づき符号拡張したコードセットのうち主なものをあげます。
7単位系 JIS 漢字コードセット
8単位系 JIS 漢字コードセット
日本語 EUC コードセット
また JIS X 0202 に基づかずに,日本独自の符号拡張を行なったコードセットとして次のものがあります。
シフト JIS コードセット
DEC 漢字コードセット
Super DEC 漢字コードセット
それぞれのコードセットで利用できる文字セットを
表 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 では次のエンコーディングをサポートします。
UTF-8
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つのコードセットを持ちます。
CS0 に属する文字は,コードの MSB(最上位ビット) が必ず0(ゼロ)となるように符号化されます。 世界各国のどの EUC の適用においても,CS0 は ASCII 文字セットと決められています。
CS1 に属する文字は,コードの各バイトの MSB が必ず1となるように符号化されます。 日本語 EUC では,CS1 は JIS X 0208 となっています。
CS2 に属する文字は SS2コード(0x8e) に続いて,コードの各バイトの MSB が必ず1となるように符号化されます。 日本語 EUC では,CS2 は JIS X 0201 RH となっています。
CS3 に属する文字は SS3コード(0x8f) に続いて,コードの各バイトの MSB が必ず1となるように符号化されます。 日本語 EUC では,CS3 は JIS X 0212 となっています。
日本語 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 0208 の未定義領域の 85 区 から 94 区 までの領域
JIS X 0212 の未定義領域の 78 区 から 94 区 までの領域
注意
JIS X 0212 の未定義領域の 78 区から 84 区までは,JIS が将来の拡張のために確保している領域です。 したがって将来,JIS がこの領域に文字を割り当てることがあれば,ユーザが定義した文字と衝突する可能性があります。
日本語 EUC コードセットについての詳細は,日本語リファレンス・ページの
eucJP
(5)A.1.4 DEC 漢字コードセット
DEC 漢字コードは,以下の文字セットから構成されるコードセットです。
ASCII または JIS X 0201 LH
DEC 漢字文字セット 1990 年版
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 拡張漢字文字セット
JIS X 0201 RH
JIS X 0212-1990
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 コードでは,次の領域にユーザ定義文字を割り当てることができます。
0xf040 から 0xfcfc (ただし第2バイトが 0x00〜0x3f, 0x7f, 0xfd〜0xff であるものを除く)
シフト 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)