CCSIDCVT(*EXCP | *LIST)
CCSIDCVT キーワードを使用して、異なる CCSID のデータ間の変換をコンパイラーが どのように扱うのかを制御できます。
2 つの CCSID が別々の文字セットをサポートしている場合、一方の CCSID にはある文字だが、 他方の CCSID には一致する文字がないといったことがあり得ます。 例えば、日本語文字セットおよびタイ語文字セットは、それぞれ、他方の文字セットの一部ではない多くの文字 を含んでいます。 UCS-2 変数に日本語文字とタイ語文字の両方が含まれていて、その UCS-2 変数 が日本語グラフィック変数に変換される場合、その DBCS 変数にはタイ語文字に一致する文字が含まれないという 結果になります。 変換では、ターゲット文字セット内に一致する文字が見つからない場合、 ターゲット変数に置換文字 が入れられます。
英数字データの置換文字は x'3F' です。 グラフィック・データの置換文字は x'FEFE' です。
CCSIDCVT キーワードには片方または両方のパラメーターを指定できます。
両方のパラメーターを指定する場合はコロンで区切ります。
指定順序は任意です。
- CCSIDCVT(*EXCP : *LIST)
- CCSIDCVT(*LIST : *EXCP)
- CCSIDCVT(*LIST)
- CCSIDCVT(*EXCP)
- *EXCP
- *EXCP は、変換の結果として実行時に置換文字になった場合は状況コード 452 の RPG 例外が起こることを 指示します。
- *LIST
- *LIST は、コンパイラーがリストにセクションを追加して、
すべての暗黙的および明示的な CCSID 変換を示し、さらに、
ターゲット文字セット内に一致する文字がないために置換文字が結果に入れられることによって生じる
データ逸失がどの変換で起こる可能性があるのかも示すことを指示します。
注: リストに「CCSID 変換の要約」セクションができるのは、プログラムまたはモジュールが作成される場合のみです。 コンパイル時のエラーがあるか、コンパイルで OPTION(*NOGEN) が 指定されている場合には作成されません。この情報は次の 2 つの目的に使用できます。
- 一部の変数のデータ・タイプを変更して変換の数を減らすことによって、パフォーマンスを向上させることができます。
- 置換文字が使用される結果になる可能性がある変換の一部を除去することによって、プログラムの信頼性を向上させることができます。 例えば、UCS-2 から英数字変数への変換があり、その英数字データは後で UCS-2 に戻される 場合、英数字変数のタイプを UCS-2 に変更すれば、発生する可能性のあったデータ逸失を回避できます。
以下のタイプの変換の結果として、置換文字が発生する可能性があります。- UCS-2 から英数字または DBCS への変換
- 異なる 2 つの DBCS CCSID 間の変換
- 英数字から DBCS への変換
- DBCS から英数字への変換
モジュール内で使用される CCSID 変換ごとに、その変換のステートメント番号のリストがあります。 詳しくは、変換を参照してください。
変換の結果として置換文字が生じる可能性がある場合、 変換項目の左側にメッセージ番号が表示されます。 そのメッセージはコンパイルの最後に「メッセージの要約」内に示されます。
実行時まで値が不明のいくつかの CCSID のために、以下の特殊値が使用されます。
- *JOBRUN
- ジョブ CCSID、または、ジョブ CCSID が 65535 の場合はデフォルトのジョブ CCSID。 CCSID(*CHAR : *JOBRUN) が制御仕様書に指定された場合は、これが RPG モジュール内の英数字データのデフォルト CCSID です。
- *JOBRUN_MIXED
- ジョブ CCSID に関連するか、または、ジョブ CCSID が 65535 の 場合はデフォルトのジョブ CCSID に関連する、混合バイト CCSID。 この CCSID は、ジョブ CCSID が混合バイト CCSID である場合は、 実際のジョブ CCSID と同じであることもあります。 CCSID(*CHAR : *JOBRUN) も CCSID(*EXACT) も制御仕様書に指定されなかった場合は、これが RPG モジュール内の英数字データのデフォルト CCSID です。 詳しくは、CCSID 制御キーワードを参照してください。
- *JOBRUN_DBCS
- ジョブ CCSID に関連するか、または、ジョブ CCSID が 65535 の場合はデフォルトのジョブ CCSID に関連する、2 バイト CCSID。この CCSID は、英数字データとグラフィック・データの間の変換で、非シフト英数字データの CCSID として使用されることがあります。
- *JOBRUN_JAVA
- RPG パラメーターまたは戻り値が英数字として定義されている場合に Java™ メソッドのパラメーターおよび戻り値に使用される CCSID。RPG コンパイラーは、この CCSID はジョブ CCSID に関連していると想定します。したがって、RPG コンパイラーは、置換文字が結果として発生するような変換の可能性はないと想定します。
次の例は、CCSID 変換の要約を示します。 最初の項目は、6 個のステートメントに、ジョブ CCSID の英数字データ から CCSID 1200 の UCS-2 データへの変換があることを示しています。 2 番目の項目は、3 つのステートメントに、 CCSID 1200 の UCS-2 データからジョブ CCSID の英数字データへの変換があることを示しています。 2 番目の項目の前にあるメッセージ RNF7357 は、これらの 変換の結果として英数字データ内に置換文字が置かれる可能性があることを示します。図 1. CCSID 変換の要約のサンプルC C S I D C o n v e r s i o n s From CCSID To CCSID References *JOBRUN 1200 27 12 321 426 552 631 RNF7357 1200 *JOBRUN 28 921 1073 * * * * * E N D O F C C S I D C O N V E R S I O N S * * * * *
