日本語ロケールを使用する場合の注意点を教えてください
日本語ロケールの使用
Micro Focus Server Express は、アプリケーション開発時に シフトJISとEUCの両方のロケールのいずれか一方を使用できる機能を装備しています。
この、両方のロケールに対応したMicro Focus製品では、実行時システムが動的にシフトJISかEUCかどちらかのコンポーネントを呼び出します。実行時システム中でこのようにロケールに依存して切り替わるモジュールとしては、AIDS、_CODESET、MFTRNSDTがあります。これらのモジュールはシフトJIS版とEUC版の両方が用意されており動的に切り替わります。利用者はCOBOL製品の使用時に正しいロケールを設定しておく必要があります。設定されたロケールに応じてシフトJISかEUCのいずれかのコンポーネントが呼び出されます。
シフトJIS・EUC対応COBOL製品の旧版からの変更点
本COBOL製品をシフトJIS・EUC対応にするために加えられた変更点は以下の通りです:
- ADISは実行時にユーザー環境をチェックする機構を含んでいます。このチェックの結果に応じて、シフトJISかEUCのADISモジュールが呼び出されます。
- プログラムのヘルプ画面の置き場所が変わり、Animatorを含むすべてのツールのヘルプ画面はすべて $COBDIR/help/ の下に、それぞれ シフトJIS、EUC、英語の3バージョンが置かれています。実行時にロケールの設定に応じて正しいバージョンのヘルプ画面がロードされます。
- 実行時システムには、それぞれシフトJIS版とEUC版のADISモジュール、_CODESETモジュールが含まれています。実行時にロケールの設定に応じて正しいバージョンのモジュールが呼び出されます。
- libscreenおよびコントロールルーチンによる日本語の2バイト文字、単バイト文字の操作方法はロケールの設定に応じて変化します。実行時に出力されるシステムメッセージは、環境に応じてシフトJIS、EUC、英語に切り替わります。
- コードジェネレータとcobコマンドはロケールに応じて、シフトJIS、EUC、英語のうちから正しいメッセージファイルを選択して使用します。
- ADISCFユーティリティ、Forms2ユーティリティには、それぞれシフトJIS、EUC、英語の3バージョンが用意されており、cobrunコマンドはロケールに応じて正しいバージョンのユーティリティを呼び出します。
- EBCDICコードコンバートを行う _CODESETとMFTRNSDTモジュールは、ロケールに応じてシフトJIS版かEUC版のいずれかが呼び出されます。
ロケールがシフトJIS、EUCのいずれでも無い場合、COBOLシステムは英語のメッセージファイルとヘルプ画面をロードします。但し、以前の版から日本語に翻訳されていなかったメッセージや画面については英語のままで出力されます。
Server ExpressにおけるシフトJIS、EUC機能の実装
ロケールの設定
オペレーティングシステムには、ロケールモデルと呼ばれる機能が含まれています。ロケールモデルは、言語や文化に依存するさまざまな属性をひとまとめにして定義しておくための機能です。こういった属性には、一文字を表現するバイト数、日付や時刻の表現形式、数字の表記法、通貨記号などがあります。文字を表現するコードセットもその一つです。通常ロケールは2つの部分に分割されます。第一の部分は言語と文字集合であり、第二の部分は国です。例えば、ja_JPは日本国内で使用される日本語文字集合を表わします。
Solaris では、ロケールを示す LANG環境変数の値は:
ja (EUCの場合)
ja_JP.PCK (シフトJISの場合)
と定められています。このほかに提供されているロケールはすべて英語であり、C、en_US、en_UKが用意されています。開発時にシフトJISまたはEUCのロケールを設定すると、ソースプログラム中の文字定数などの取り扱いに影響が出てきます。従って、アプリケーションの開発時と実行時に同じロケールを設定しなければなりません。
シフトJISでの実行とEUCでの実行の相違点
シフトJIS環境でアプリケーションを実行する場合とEUC環境での実行との相違点を理解しておくことが重要です。
・ソースプログラム中の非ASCII文字(2バイト文字など)は、EUC環境下ではEUCで、 シフトJIS環境下ではシフトJISで表現されていることが前提とされます。そうでない場合、コンパイラは予期せぬ動作を行うことがあります。
・PIC Nデータ項目の扱いにおいて、シフトJISまたはEUCのコード系が仮定されます。例えば、PIC XからPIC Nへの転記におけるコード変換がこれに当たります。
・2バイトの空白文字のコードは以下のようにコード系に依存します:
x'8140' シフトJISの場合
x'A1A1' EUCの場合
・行順編成ファイルと画面に対する入出力では特定のコード系が仮定されます。EUC環境下でシフトJISデータを入力したり、その逆を行ったりすると不正な実行結果を引き起こすことがあります。
・コンパイル時、実行時のシステムメッセージはEUC環境下ではEUCで表示され、シフトJIS環境下ではシフトJISで表示されます。
・シフトJISロケールでコンパイルされたプログラムはEUCロケールのもとでは正しく結果を表示しません。その逆も正しくありません。
・シフトJIS環境では半角カタカナは1バイトで表現され、1文字幅で表示されますので、実行時スイッチJは意味を持ちません。EUCロケールのもとでは、Jスイッチの指定によってADISで入力された半角カタカナの全角カタカナへの変換を制御できます。Jスイッチについての説明はシステムリファレンスに記載されています。