変換
同じ命令の中でタイプまたは CCSID が異なる文字値、図形値、および UCS-2 値を使用する場合、
すべての値のタイプと CCSID が同じになるように変換が必要です。
変換は、変換組み込み関数 %CHAR、%UCS2、または %GRAPH を使用するか、MOVE または MOVEL 命令を
使用して、明示的に実行できます。
ただし、以下のシナリオでは、必要なときにコンパイラーが暗黙的に変換を行います。
- 比較
- 比較は Unicode CCSID を使用して行われます。 一方または両方のオペランドがまだこの CCSID ではない場合、 オペランドはこの CCSID に一時的に変換されます。
- 代入
- ソース値がターゲット値のタイプおよび CCSID に変換されます。
- 値および読み取り専用参照によって渡されるパラメーター
- 渡されたパラメーターは、プロトタイプ・パラメーターのタイプおよび CCSID に変換されます。
- 連結
- 一方のオペランドが 16 進リテラルの場合、他方のオペランド も文字タイプでなければなりません。この場合、16 進リテラル は他方のオペランドと同じ CCSID であると見なされます。 そうでない場合、オペランドは Unicode CCSID に 変換されます。
オペランドが Unicode CCSID に変換されるときには、
使用する Unicode CCSID を正確に判断するために、以下のルールが使用されます。
- いずれかのオペランドのタイプが文字の場合、 オペランドは UTF-8 に変換されます。
- それ以外の場合で、どちらのオペランドも UCS-2 ではない場合、 オペランドはモジュールの UCS-2 CCSID に変換されます。 モジュールの UCS-2 CCSID はデフォルトで 13488 に設定されますが、 制御ステートメントで CCSID(*UCS2) キーワードを 使用して、異なる CCSID に設定することができます。
- それ以外の場合で、一方のオペランドのみのタイプが UCS-2 の場合、 他方のオペランドは UCS-2 オペランドの CCSID に変換されます。
- それ以外の場合で、UCS-2 オペランドの一方がモジュールの デフォルト UCS-2 CCSID である場合、その CCSID が使用されます。
- それ以外の場合、定義された長さが短いほうのオペランドが、長いほうのオペランドの CCSID に 変換されます。
警告:
- 一方のオペランドが他方のオペランドの文字セットにない文字を含んでいる場合、 一部の CCSID 変換ではすべての文字を変換することはできないことがあります。 例えば、ユニコードのオペランドから、シングル文字セットを表す CCSID (例えば、EBCDIC CCSID) のオペランドに データを割り当てる場合、ユニコードのオペランド内の一部の文字が、異なる文字セットからのものであることがあります。 この場合、ターゲット・オペランドに置換文字が入れられます。 デフォルトでは、このシチュエーションの結果は、エラーではない状況コード 50 になります。 ただし、制御キーワード CCSIDCVT(*EXCP) を指定すると、 このシチュエーションの結果はエラー状況コード 00452 になります。
- 制御キーワード CCSIDCVT(*LIST) を使用して、モジュール内で実行される可能性のあるすべての CCSID 変換 のリストを取得できます。 このリストには、結果として置換文字になる可能性のある CCSID 変換についての警告も示されます。