この章では、JFP で提供している日本語ロケールの定義内容について説明します。
日本語 EUC は、EUC (Extended UNIX Code : 拡張 UNIX コード) に、以下の日本語文字集合を割り当てた文字集合およびエンコーディングを提供します。これは、ja または ja_JP.EUC ロケールで日本語を表現する文字コード体系として使われています。
表 2-1 日本語 EUC の文字集合
ただし、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 漢字コード (以降、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 は、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 または ja_JP.EUC ロケール、PCK を扱う ja_JP.PCK ロケール、 UTF-8 を扱う Ja_JP.UTF-8 ロケールを提供します。また、日本語 Solaris 1.x システムとのネットワーク環境での共存のため 「japanese」というロケール名も ja と同等のロケールとして提供します。
「japanese」というロケール名は将来の Solaris リリースでは提供されません。「ja」という名前に変更することをお勧めします。
ロケールとは、特定の言語や文化、慣習のことです。日本語ロケールデータベースを作成すると、ロケールを切り替えるだけで、国際化されたシステムソフトウェアやアプリケーションを日本語環境に適応させることができます。
各日本語ロケールは、扱う文字コードが異なるだけで、ロケールとしての挙動は同じになるように定義されています。たとえば、ja または ja_JP.EUC ロケールで print という文字分類クラスに属する文字は、 ja_JP.PCK や ja_JP.UTF-8 ロケールでも同じ文字になります。ただし、PCK より日本語 EUC 、日本語 EUC よりUTF-8 の方が扱う文字が多いので、UTF-8 にしか存在しない文字の挙動は、ja_JP.UTF-8 ロケールにのみ定義されています。
特定の似かよった文字の集合 (クラスと呼びます) を作ることによって、プログラム上、そのクラスを意識するだけで (そのクラスにどの文字が含まれているかを意識することなく)、ロケールに依存しない国際化プログラミングが可能になります。日本語ロケールでは、以下のようなクラスが定義されています。
これらの文字分類クラスは、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 点を意味します。
JIS X 0212 の文字に関しては、ja または ja_JP.EUC および ja_JP.UTF-8 ロケールのみ該当します。
ja_JP.UTF-8 ロケールでは、各クラスに、Unicode で定義された上記以外の文字も追加されています。
JIS X 0201 機能キャラクタ集合、ローマ文字用図形キャラクタ集合、片仮名用図形キャラクタ集合での XX/YY は XX 列 YY 行を意味します。 JIS X 0208、JIS X 0212 での XX/YY は XX 区 YY 点を意味します。
JIS X 0212 の文字に関しては、ja または ja_JP.EUC および ja_JP.UTF-8 ロケールのみ該当します。
日本語文字の照合順序は、文字コード値の順になります。ただし、ja_JP.PCK ロケールの場合、JIS X 0201 片仮名用図形キャラクタ集合は、JIS X 0201 ローマ文字用図形キャラクタ集合、抹消文字の次になるように修正されています。文字の照合順序は、LC_COLLATE カテゴリの値に影響を受けます。
JFP の提供する単語処理用共有オブジェクトは、単語処理用文字分類情報、詰め込み処理用単語分割・結合処理情報などをアプリケーションに提供します。これらの情報を利用するための API は今のところ公開されていません。
SunOS および JFP における日本語の日付と時刻の表示形式は、以下のとおりです。
表 2-6 日付と時刻の表示形式
SunOS /JFP での定義 |
|
---|---|
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) |
日曜日 |
月曜日 |
|
火曜日 |
|
水曜日 |
|
木曜日 |
|
金曜日 |
|
土曜日 |
|
%H時%M分%S秒 |
|
%Y年%m月%d日 |
|
日付/時刻 (%c) |
%Y年%m月%d日 %a %H時%M分%S秒 |
午前 |
|
午後 |
|
午前/午後を伴う 12 時間表示形式(%r) |
%p%I時%M分%S秒 |
時刻の代替表示形式 (%EX) |
%H時%M分%S秒 |
日付の代替表示形式 (%Ex) |
%EY%m月%d日 |
日付および時刻の代替形式 (%Ec) |
%EY%m月%d日 %a %H時%M分%S秒 |
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 |