データ変換

ランタイム環境が異なるとデータを解釈する方法にも差が生じるので、ある環境から別の環境に渡すデータは、プログラム上での変換が必要な場合があります。 データ変換が実行されるタイミングは、 Java™ の実行時です。

実行時の状態が次のような場合にも、コード上で変換テーブルが使用されます。

例えば、コードが 2 つの再定義レコードのいずれかに値を割り当てるときに、 それぞれが、別のプログラムに渡されるレコードとして同じメモリー領域を参照する場合に、 実行時変換を使用します。値を割り当てる再定義レコードに応じて、 渡すデータの特性が異なると想定します。この場合、データ変換の要件は、生成時には不明です。

これ以降は、次に示す項目の詳細を説明します。

起動側が Java コードの場合のデータ変換

以下の規則は Java コードに適用されます。
  • 生成された Java プログラムまたはラッパーが、生成された Java プログラムを呼び出すと、 実行時に呼び出される 1 組の EGL クラスに従って、呼び出し側で変換が実行されます。 起動側が使用しているのとは異なるコード・ページを使用するリモート・プラットフォームに呼び出し側がアクセスする場合でも、 ほとんどの場合は、変換を要求する必要がまったくありません。ただし、次のような場合は、変換テーブルを指定する必要があります。
    • 呼び出し側が Java コードであり、1 つのコード・ページをサポートするマシン上で稼働している。
    • 呼び出し先プログラムが非 Java であり、別のコード・ページをサポートするマシン上で稼働している。

    この場合のテーブル名は、実行時に必要な種類の変換を表すシンボルになります。

  • 生成された Java プログラムがリモートの MQSeries® メッセージ・キューにアクセスすると、 実行時に呼び出される一連の EGL クラスに従って、起動側で変換が実行されます。起動側が使用しているのとは異なるコード・ページを使用するリモート・プラットフォームに呼び出し側がアクセスする場合は、 『関連要素』に示す、MQSeries メッセージ・キューを参照する変換テーブルを指定します。
次の表は、生成された Java コードが実行時にアクセスできる変換テーブルをまとめたものです。各変換テーブル名のフォーマットは、CSOJx で、c および x の意味は、次のとおりです。
x
呼び出し先のプラットフォームでサポートされているコード・ページ番号を表します。各番号は、「Character Data Representation Architecture Reference and Registry、SC09-2190」に指定されています。各変換テーブルによってサポートされているコード化文字セットは、レジストリーによって識別できます。
言語 呼び出し先プログラムのプラットフォーム
UNIX® Windows® 2000/NT/XP z/OS UNIX システム・サービスまたは iSeries™ Java
アラビア語 CSOJ1046 CSOJ1256 CSOJ420
中国語 (簡体字) CSOJ1381 CSOJ1386 CSOJ1388
中国語 (繁体字) CSOJ950 CSOJ950 CSOJ1371
キリル文字言語 CSOJ866 CSOJ1251 CSOJ1025
デンマーク語 CSOJ850 CSOJ850 CSOJ277
東ヨーロッパ言語 CSOJ852 CSOJ1250 CSOJ870
英語 (英国) CSOJ850 CSOJ1252 CSOJ285
英語 (米国) CSOJ850 CSOJ1252 CSOJ037
フランス語 CSOJ850 CSOJ1252 CSOJ297
ドイツ語 CSOJ850 CSOJ1252 CSOJ273
ギリシャ語 CSOJ813 CSOJ1253 CSOJ875
ヘブライ語 CSOJ856 CSOJ1255 CSOJ424
日本語 CSOJ943 CSOJ943 CSOJ1390 (カタカナ SBCS)、CSOJ1399 (ラテン語 SBCS)
韓国語 CSOJ949 CSOJ949 CSOJ1364
ポルトガル語 CSOJ850 CSOJ1252 CSOJ037
スペイン語 CSOJ850 CSOJ1252 CSOJ284
スウェーデン語 CSOJ850 CSOJ1252 CSOJ278
スイス・ドイツ語 CSOJ850 CSOJ1252 CSOJ500
トルコ語 CSOJ920 CSOJ1254 CSOJ1026

プログラムを Java から呼び出す場合に、 リンケージ・オプション・パーツで変換テーブルの値を指定しない場合は、 デフォルトの変換テーブルは英語 (米国) 用の変換テーブルになります。

変換アルゴリズム

レコードと構造体のデータ変換は、副構造のない構造体項目の宣言が基本になります。

型が CHAR、DBCHAR、または MBCHAR のデータは、(EGL 生成の起動側で変換される場合) Java 変換テーブルに従って変換されます。

充てん文字データ項目 (名前のないデータ項目) の場合や、型が DECIMAL、 PACF、HEX、または UNICODE のデータ項目の場合は、変換が実行されません。

MBCHAR データの EBCDIC から ASCII への変換では、変換ルーチンによってシフトイン・シフトアウト (SO/SI) 文字が削除され、この文字数と同じ数のブランクがデータ項目の末尾に追加されます。ASCII から EBCDIC への変換では、変換ルーチンによって 2 バイトのストリングの前後に SO/SI 文字が挿入され、フィールドに収容できる有効な最後の文字で値が切り捨てられます。 MBCHAR フィールドが可変長レコード内にあり、現行レコードの末尾が MBCHAR フィールド内にある場合、レコード長は SO/SI 文字の挿入または削除を反映するように調整されます。レコード長は、現行レコードの末尾がどこにあるかを示しています。

型が BIN のデータ項目では、呼び出し側または呼び出し先のプラットフォームで Intel® の 2 進数形式が使用され、 もう一方のプラットフォームではその形式が使用されていない場合、バイト数を基準にしたデータ項目の順序が変換ルーチンによって逆になります。

型が NUM または NUMC のデータ項目では、変換ルーチンが CHAR アルゴリズムを使用して、最後のバイトを除くすべてのバイトを変換します。符号ハーフバイト (フィールドの最後のバイトのうちの最初の半バイト) は、次の表に示す 16 進値に従って変換されます。

NUM 型 の EBCDIC NUMC 型 の EBCDIC ASCII
F (正符号) C 3
D (負符号) D 7
フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.