文字エンコード・ユニット (またはエンコード・ユニット) は、実行時に COBOL によって 1 文字として処理されるデータの単位です。本書では、文字 および文字位置 という用語は、単一のエンコード・ユニットを意味します。
データ項目およびリテラルのエンコード・ユニットのサイズは、次に説明するように、データ項目の USAGE 節またはリテラルのカテゴリーによって異なります。
図形文字とエンコード・ユニットの関係は、データ項目またはリテラルに使用されるコード・ページのタイプによって異なります。 実行時のコード・ページのタイプは、以下のとおりです。
コード・ページの各タイプの詳細については、以下のセクションを参照してください。
USAGE DISPLAY で記述されたデータ項目および英数字カテゴリーのリテラルでは、EBCDIC コード・ページ でエンコードされた 1 バイト文字を使用できます。エンコード・ユニットは 1 バイトであり、図形文字はそれぞれ 1 バイトで表されます。これらのデータ項目およびリテラルについては、エンコード・ユニットを気にする必要はありません。
USAGE DISPLAY で記述されたデータ項目および英数字カテゴリーのリテラルでは、1 バイトおよび 2 バイトの EBCDIC 文字を混合して使用できます。2 バイト文字は、シフトアウト文字とシフトイン文字で区切る必要があります。エンコード・ユニットは 1 バイトであり、図形文字のサイズは 1 バイトまたは 2 バイトです。
英数字データ項目またはリテラルに DBCS データが含まれている場合、プログラマーは、 操作によって、1 つの図形文字を形成する複数のエンコード・ユニットが意図しない個所で分離されることのないようにする必要があります。参照変更は慎重に行い、また、移動中に切り捨てが行われないようにする必要があります。 COBOL ランタイム・システムでは、1 つの図形文字を形成する複数のエンコード・ユニットが分割されていないかどうか、およびシフトアウト・コードまたはシフトイン・コードが欠落していないかどうかのチェックは行いません。
問題を避けるため、英数字リテラル、および USAGE DISPLAY で記述されたデータ項目は、データ項目またはリテラルを USAGE NATIONAL で記述されたデータ項目へ移動するか、または NATIONAL-OF 組み込み関数を使用することによって、国別データ (UTF-16) へ変換できます。こうすることにより、図形文字が分離されることを気にせずに国別データを操作できます。このデータは、DISPLAY-OF 組み込み関数を使用して変換して、USAGE DISPLAY に戻すことができます。
USAGE NATIONAL で記述されるデータ項目で UTF-16 を使用できます。 ソース・プログラムで使用されるコード・ページに関係なく、国別リテラルは UTF-16 文字として保管されます。 USAGE NATIONAL のデータ項目 および国別リテラルのエンコード・ユニットは、2 バイトです。
UTF-16 のほとんどの文字の場合、図形文字は 1 つのエンコード・ユニットです。 EBCDIC、ASCII、または EUC のコード・ページから UTF-16 に変換された文字は、1 つの UTF-16 エンコード・ユニットとして表現されます。 それ以外に UTF-16 には、サロゲート・ペア または文字シーケンスの結合 で表現される 図形文字もあります。 1 組のサロゲート・ペアは 2 つのエンコード・ユニット (4 バイト) から構成されます。 文字シーケンスの結合は、1 つの基本文字と 1 つ以上の結合マーク または 1 つ以上の結合マークの シーケンス (4 バイト以上で、2 バイトずつ増分される) で表現されます。 USAGE NATIONAL のデータ項目 では、2 バイトのエンコード・ユニットが、それぞれ 1 文字として処理されます。
国別データにサロゲート・ペアまたは文字シーケンスの結合が含まれている場合、プログラマーは、国別文字に対して行う操作に よって、1 つの図形文字を形成する複数のエンコード・ユニットが意図しない個所で分離されることのないようにする必要があります。 参照変更は慎重に行い、また、移動中に切り捨てが行われないようにする必要があります。 COBOL ランタイム・システムでは、1 つの図形文字を形成する複数のエンコード・ユニットが分割されていないかどうかのチェックは行いません。