JFP ユーザーズガイド

第 2 章 日本語ロケール

この章では、JFP で提供している日本語ロケールの定義内容に関して説明します。

日本語文字コード

日本語 EUC

日本語 EUC は、EUC (Extended UNIX Code : 拡張 UNIX コード) に、以下の日本語文字集合を割り当てた文字集合およびエンコーディングを提供するものです。ja ロケールで日本語を表現する文字コード体系として使われています。

表 2-1 日本語 EUC の文字集合

文字集合 (符号化文字集合) 

文字コード 

JIS X 0201-1976 

   機能キャラクタ集合 

   間隔文字 

   ローマ文字用図形キャラクタ集合 

   抹消文字 

0x00 - 0x19 

0x20 

0x21 - 0x7e 

0x7f 

ISO 6429 C1 制御文字 (0x8e、0x8f を除く) 

0x80 - 0x9f 

JIS X 0201-1976 片仮名用図形キャラクタ集合 

    (文字未定義領域 E/0 - F/14 は含まない) 

0x8ea1 - 0x8edf 

JIS X 0208-1990 (1 - 84 区) 

0xa1a1 - 0xf4fe 

JIS X 0212-1990 (1 - 84 区) 

0x8fa1a1 - 0x8ff4fe 

ユーザー定義文字 (1 - 20 区) 

0xf5a1 - 0xfefe 

0x8ff5a1 - 0x8ffefe 

ただし、JIS で未定義となっている以下の領域には、ベンダー定義文字を割り当てています。

JIS X 0208 13 区 

特殊記号 

JIS X 0212 83 区 - 84 区 

JIS X 0212 に含まれない IBM 拡張文字 

日本語 EUC の場合、ベンダー定義文字とは、JIS X 0208 13 区文字未定義領域に割り当てられた特殊記号、ならびに JIS X 0212 83 区 - 84 区文字未定義領域に割り当てられた JIS X 0208 と JIS X 0212 のどちらにも含まれない IBM 拡張文字を表します。

PC 漢字コード

PC 漢字コード (以降、PCK とします) は一般に「シフト JIS (あるいは MS 漢字) コード」と呼ばれ、Microsoft が Windows 3.1 で規定したマイクロソフト標準キャラクタセットと同等の文字集合およびエンコーディングを提供するものです。ja_JP.PCK ロケールで日本語を表現する文字コード体系として使われています。

表 2-2 PCK の文字集合

文字集合 (符号化文字集合) 

文字コード 

JIS X 0201-1976 

   機能キャラクタ集合 

   間隔文字 

   ローマ文字用図形キャラクタ集合 

   抹消文字 

0x00 - 0x19 

0x20 

0x21 - 0x7e 

0x7f 

JIS X 0201-1976 片仮名用図形キャラクタ集合 

    (文字未定義領域 E/0 - F/14 は含まない) 

0xa1 - 0xdf 

JIS X 0208-1990 (1 - 84 区) 

0x8140 - 0x9ffc 

0xe040 - 0xeafc 

NEC 選定 IBM 拡張文字 

0xed40 - 0xeffc 

ユーザー定義文字 (1 - 20 区) 

0xf040 - 0xf9fc 

IBM 拡張文字 

0xfa40 - 0xfcfc 

ただし、JIS で未定義となっている以下の領域には、ベンダー定義文字を割り当てています。

JIS X 0208 13 区 

特殊記号 

PCK の場合、ベンダー定義文字とは、JIS X 0208 13 区文字未定義領域に割り当てられた特殊記号、NEC 選定 IBM 拡張文字、ならびに IBM 拡張文字を表します。

UTF-8

UTF-8 は、Unicode のエンコーディングの1つであり、ASCII 部分 (0x00-0x7F) に関しては EUC または PCK と互換性をたもったまま、UCS-2 や UCS-4 の文字を使えるようにしたエンコーディングです。ja_JP.UTF-8 ロケールで文字を表現する文字コード体系として使われています。

表 2-3 UTF-8 の文字集合

文字集合 (符号化文字集合) 

文字コード 

Unicode 2.1 

0x00 - 0xefbfbf (U+0000 - U+FFFF) 

ユーザー定義文字領域は Unicode 2.1 で Private Use area に割り当てられている 0xee8080 - 0xefa3bf (U+E000 - U+F8FF) が該当します。日本語 EUC や PCK で表現できるすべての文字(ベンダー定義文字も含む)も Unicode 2.1 の中に含まれています。


注 -

U+XXXX の XXXX は Unicode 2.1 で表現しているコードを意味します。



注 -

Unicode 2.1 で定義された Surrogate Area (U+D800 - U+DFFF) はサポートされてません。



注 -

Solaris のフォントの制限で、日本語 UTF-8 で Unicode 2.1 で定義されたすべての文字が表示できるわけではありません。


日本語ロケール

JFP では、システム提供の日本語ロケールとして、日本語 EUC を扱う ja ロケール、PCK を扱う ja_JP.PCK ロケールおよび UTF-8 を扱う Ja_JP.UTF-8 ロケールを提供します。また、JLE 1.x システムとのネットワーク環境での共存のため 「japanese」というロケール名も ja と同等のロケールとして提供します。

ロケールとは、特定の言語や文化、慣習のことを意味します。日本語ロケールデータベースを作成することによって、国際化されたシステムソフトウェアやアプリケーションを、ロケールを切り替えるだけで日本語環境に適応できます。

基本的に日本語ロケール間の違いは、扱う文字コードが異なるだけで、ロケールとしての挙動は同じになるように定義されています。たとえば、ja ロケールで print という文字分類クラスに属する文字は、 ja_JP.PCK や ja_JP.UTF-8 ロケールでも同じ文字が定義されています。ただし、日本語 EUC の方が PCK より、UTF-8 の方が日本語 EUC より扱う文字が多いので、UTF-8 にしか存在しない文字に関しては、ja_JP.UTF-8 ロケールのみ、その文字の挙動が定義されています。

文字分類 (LC_CTYPE カテゴリ)

特定の似かよった文字の集合 (クラスと呼びます) を作ることによって、プログラム上、そのクラスを意識するだけで (そのクラスにどの文字が含まれているかを意識することなく)、ロケールに依存しない国際化プログラミングが可能になります。日本語ロケールでは、以下のようなクラスが定義されています。

これらの文字分類クラスは、regex(5) をサポートしたコマンドで、文字クラス表現の文字列として使用可能です。また、wctype(3C) の文字クラスとしても使用可能です。なお、文字分類は LC_CTYPE カテゴリの値に影響を受けます。開発者として文字分類クラスを利用する場合は、『JFP 開発ガイド』を参照してください。

表 2-4 X/Open で規定された文字分類クラス名と日本語ロケールでの定義範囲

文字クラス名 

意味 / 範囲 [JIS X 0201 機能キャラクタ集合、ローマ文字用図形キャラクタ集合、片仮名用図形キャラクタ集合での XX/YY は XX 列 YY 行を意味します。JIS X 0208、JIS X 0212 での XX/YY は XX 区 YY 点を意味します。]

upper

任意の大文字を表す文字クラス 

JIS X 0201 ローマ文字用図形キャラクタ集合 

 

アルファベット大文字 (C/1 - D/10) 

JIS X 0208 

 

ローマ字大文字 (3/33 - 3/58) 

ギリシャ文字大文字 (6/1 - 24) 

ロシア文字大文字 (7/1 - 33) 

JIS X 0212 [JIS X 0212 の文字に関しては、ja および ja_JP.UTF-8 ロケールのみ該当します。]

 

ダイアクリティカルマーク付きギリシャアルファベット文字大文字 (6/65 - 69、71、73、74、76) 

キリル系アルファベット大文字 (7/34 - 46) 

ラテン系アルファベット大文字 (9/1、2、4、6、8、9、11、12、13、15、16) 

ダイアクリティカルマーク付ラテン系アルファベット大文字 

(10/01 - 24、26 - 87) 

lower

任意の小文字を表す文字クラス 

JIS X 0201 ローマ文字用図形キャラクタ集合 

 

アルファベット小文字 (E/1 - F/10) 

JIS X 0208 

 

ローマ字小文字 (3/65 - 90) 

ギリシャ文字小文字 (6/33 - 56) 

ロシア文字小文字 (7/49 - 81) 

JIS X 02122

 

ダイアクリティカルマーク付きギリシャアルファベット文字小文字 (6/81 - 92) 

キリル系アルファベット小文字 (7/82 - 94) 

ラテン系アルファベット小文字 (9/33 - 48) 

ダイアクリティカルマーク付ラテン系アルファベット小文字 

(11/1 - 27、29 - 35、37 - 87) 

digit

10 進表現に用いる 0 - 9 までの数字を判別するクラス 

JIS X 0201 ローマ文字用図形キャラクタ集合 

 

 

数字 (B/0 - 9) 

space

空白を判別するクラス 

JIS X 0201 制御キャラクタ集合 

 

空白 (A/9 - 13) 

間隔文字 

 

JIS X 0208 

 

間隔 (1/1) 

punct

記号、特殊文字などを判別するクラス 

JIS X 0201 ローマ文字用図形キャラクタ集合 

 

 

A/1 - 15、B/10 - C/0、D/11 - E/0、F/11 - 14 

cntrl

制御文字を判別するクラス 

JIS X 0201 制御キャラクタ集合 

 

すべての文字 

抹消文字 

C1 制御文字 

 

 

すべての文字 

blank

 

フィールド区切り文字を判別するクラス 

JIS X 0201 制御キャラクタ集合 

 

A/9 

間隔文字 

JIS X 0208 

 

間隔 (1/1) 

xdigit

16 進表現に用いる英数字を判別するクラス 

JIS X 0201 ローマ文字用図形キャラクタ集合 

 

数字 (B/0 - 9) 

A - F、a - f (C/1 - 6、E/1 - 6) 

alpha

アルファベットを判別するクラス 

upper クラスと lower クラスの文字

print

表示可能文字を判別するクラス 

JIS X 0201 ローマ文字用図形キャラクタ集合 

間隔文字 

JIS X 0201 片仮名用図形キャラクタ集合 

 

文字未定義領域以外のすべての文字 

JIS X 0208 

 

文字未定義領域以外のすべての文字 

JIS X 02122

 

文字未定義領域以外のすべての文字 

ベンダー定義文字領域

 

vdc クラスのうち、文字未定義領域以外のすべての文字

ユーザー定義文字領域

 

udc クラスのうち、文字未定義領域も含むすべての文字  

graph

 

図形文字を判別するためのクラス 

print クラスから space クラスに含まれる文字を除いたすべての文字


注 -

ja_JP.UTF-8 ロケールではそれぞれのクラスで、これら以外のに Unicode で定義された文字が追加されています。


表 2-5 日本語ロケール専用の文字分類クラス名とその定義範囲

文字クラス名 

意味 / 範囲 [JIS X 0201 機能キャラクタ集合、ローマ文字用図形キャラクタ集合、片仮名用図形キャラクタ集合での XX/YY は XX 列 YY 行を意味します。JIS X 0208、JIS X 0212 での XX/YY は XX 区 YY 点を意味します。]

jkanji

漢字 (漢字表記のために使用する記号、表意文字) を判別するクラス 

JIS X 0208 

 

16 区 - 84 区の文字定義領域 

JIS X 0212 [JIS X 0212 の文字に関しては、ja および ja_JP.UTF-8 ロケールのみ該当します。]

 

16 区 - 77 区の文字定義領域 

jkata

片仮名を判別するクラス 

JIS X 0208 

 

5/1 - 86、1/11、12、19、20 

jhira

平仮名を判別するクラス 

JIS X 0208 

 

4/1 - 83、1/11、12、21、22、26 

jdigit

digit に含まれる以外の数字を判別するクラス

JIS X 0208 

 

3/16 - 25 

jparen

括弧などに用いるための文字を判別するクラス 

JIS X 0208 

 

1/38 - 59 

line

罫線素片を判別するためのクラス 

JIS X 0208 

 

8/1 - 32 

jisx0201r

JIS X 0201 片仮名用図形キャラクタ集合に属する文字を判別するクラス 

JIS X 0201 片仮名用図形キャラクタ集合 

 

A/1 - D/15 までのすべての文字 

jisx0208

JIS X 0208 に属する文字を判別するクラス 

JIS X 0208 

 

文字未定義領域の文字を含むすべての文字。 ただし、1 - 84 区まで  

(13 区 ベンダー定義文字領域もここに含まれる)

jisx0212

JIS X 02122 に属する文字を判別するクラス

JIS X 0212 

 

文字未定義領域の文字を含むすべての文字。ただし、1 - 84 区まで 

(83、84 区ベンダー定義文字領域もここに含まれる) 

ja_JP.PCK ロケールではどの文字もこのクラスに属さない 

udc

ユーザー定義文字を判別するクラス

ユーザー定義文字領域の文字未定義領域も含むすべての文字 

 

ja ロケール 

 

   ユーザー定義文字 (1 - 20 区)  

0xf5a1 - 0xfefe 

0x8ff5a1 - 0x8ffefe 

 

ja_JP.PCK ロケール 

 

   ユーザー定義文字 (1 - 20 区) 

 

ja_JP.UTF-8 ロケール 

 

   ユーザー定義文字 (6400 文字)  

0xee8080 - 0xefa3bf (U+E000 - U+F8FF) 

vdc

ベンダー定義文字を判別するクラス

ベンダー定義文字領域の文字未定義領域も含むすべての文字 

 

ja ロケール 

 

   JIS X 0208 13 区  

   JIS X 02122 83 区 - 84 区

特殊記号 

JIS X 0212 に含まれない IBM 拡張文字 

 

ja_JP.PCK ロケール 

 

   JIS X 0208 13 区  

   NEC 選定 IBM 拡張文字 

   IBM 拡張文字 

特殊記号 

0xed40 - 0xeffc 

0xfa40 - 0xfcfc 

 

ja_JP.UTF-8ロケール 

 

   定義なし  

 

jalpha

漢字を表す文字を判別するクラス 

 

JIS X 0208 

 

3/33_58,、 3/65_90 

 

jspecial

特殊文字を表す文字を判別するクラス 

JIS X 0208 

 

1/2 - 94、2/1 - 14、2/26 - 33、2/42 - 48、2/60 - 74、2/82 - 89、94 

JIS X 0212 

 

2/15 - 25、 2/34 - 36、 2/75 - 81 

JIS X 0208 13 区.....特殊記号 

IBM 拡張文字 

 

NEC 選定 IBM 拡張文字で定義される特殊文字 

jgreek

ギリシャ文字を判別するクラス 

JIS X 0208 

 

6/1 - 7/33,、6/33 - 56 

jrussian

ロシア文字を判別するクラス 

JIS X 0208 

 

7/1 - 7/33,、7/49 - 81 

junit

単位記号を判別するクラス 

JIS X 0208 

 

1/75 - 83, 2/82, 83 

JIS X 0212 

 

2/80 

jsci

学術記号を判別するクラス 

JIS X 0208 

 

1/60 - 74, 2/26 - 33, 2/42 - 48 

 

2/60 - 74 

jgen

一般記号を判別するクラス 

JIS X 0208 

 

1/84 - 94, 2/1-14,2/84-89, 94 

JIS X 0212 

 

2/35, 75, 2/79-81 

JIS X 0212 

 

2/35, 75, 2/79 - 81 

jpunct

一般記号を判別するクラス 

JIS X 0208 

 

1/2 - 37 

JIS X 0212 

 

2/34, 36 

文字の照合順序 (LC_COLLATE カテゴリ)

日本語文字の照合順序は、文字コード値の順になります。ただし、ja_JP.PCK ロケールの場合、JIS X 0201 片仮名用図形キャラクタ集合は、JIS X 0201 ローマ文字用図形キャラクタ集合、抹消文字の次になるように修正されています。文字の照合順序は、LC_COLLATE カテゴリの値に影響を受けます。

単語処理

JFP の提供する単語処理用共有オブジェクトは、単語処理用文字分類情報、詰め込み処理用単語分割・結合処理情報などをアプリケーションに供給します。これらの情報を利用するための API は今のところ公開されていません。

日付と時刻の表示形式 (LC_TIME カテゴリ)

SunOS および JFP における日本語の日付と時刻の表示形式は、以下のとおりです。

表 2-6 日付と時刻の表示形式

項目 (strftime(3C) での変換指定)

SunOS /JFP での定義 

月の名前の省略形 (%b)

1月 

2月 

3月 

4月 

5月 

6月 

7月 

8月 

9月 

10月 

11月 

12月 

月の名前 (%B) 

1月 

2月 

3月 

4月 

5月 

6月 

7月 

8月 

9月 

10月 

11月 

12月 

曜日の名前の省略形 (%a)

(日) 

 

(月) 

 

(火) 

 

(水) 

 

(木) 

 

(金) 

 

(土) 

曜日の名前 (%A)  

日曜日 

 

月曜日 

 

火曜日 

 

水曜日 

 

木曜日 

 

金曜日 

土曜日 

時刻 (%X)

%H時%M分%S秒 

日付 (%x)

%Y年%m月%d日 

日付/時刻 (%c)  

%Y年%m月%d日 %a %H時%M分%S秒 

午前/午後 (%p)

午前 

午後 

午前/午後を伴う 12 時間表示形式(%r) 

%p%I時%M分%S秒 

時刻の代替表示形式 (%EX) 

%H時%M分%S秒 

日付の代替表示形式 (%Ex) 

%EY%m月%d日 

日付および時刻の代替形式 (%Ec) 

%EY%m月%d日 %a %H時%M分%S秒 

代替年表示 (%EY)

 

  1927/01/01 - 1989/01/07 

昭和%Ey年 

  1989/01/08 - 1989/12/31 

平成元年 

  1990/01/01 - 

平成%Ey年 

日付/時刻、長形式 (%C) 

%Y年%m月%d日 %a %H時%M分%S秒 %Z