バージョン 4.2.5
 —  Unicode およびコードページのサポート  —

ダブルバイト文字サポート

ほとんどの東アジア言語では、コードページ文字列内の言語固有の文字(Natural フォーマット A)は 2 バイト(いわゆるダブルバイト文字セット)で表され、ASCII 文字(メインフレーム上の EBCDIC)は 1 バイトで表されます。 そのため、コードページ文字列は、1 バイトと 2 バイトという異なる長さの文字で構成されます。

Natural は、ダブルバイト文字セットを基本的にサポートします。 Windows では、このサポートは、Natural デフォルトコードページと Windows システムコードページの両方がダブルバイトコードページとして定義されている場合に有効です。 Natural で特定のコードページが定義されていない場合は、ダブルバイトの Windows システムコードページが定義されていれば十分です。 UNIX および OpenVMS では、ダブルバイト文字セットのサポートは、Natural デフォルトコードページがダブルバイトコードページである場合に有効です。 メインフレームでは、プロファイルパラメータ CP が EBCDIC MBCS コードページ(IBM-942 など)に設定されている必要があります。

ダブルバイト文字セットのサポートが有効な場合、Natural では、すべての文字列操作について、ダブルバイト文字セットが 1 つのユニットとして処理されることが保証されます。 このことは、文字列の意味を保持するために不可欠です。

フォーマット A の変数の操作の後(例えば、SUBSTRING オプションを使用してサブストリングを抽出した後)でダブルバイト文字セットの先頭または末尾の 1 バイトが残された場合、このバイトは空白文字で置き換えられます。

次の例では、コードページ Shift_JIS が選択されています。 変数 #A には、4 文字で構成された文字列が含まれています。 最初と最後の文字は、コードページ Shift_JIS でバイトシーケンス H'8282' によって表されるダブルバイト文字セット "FULL WIDTH LATIN SMALL LETTER B" です。 2 番目と 3 番目の文字は、1 バイト H'61' によって表されるシングルバイト文字 "LATIN SMALL LETTER A" です。 したがって、文字列全体の 16 進表示は H'828261618282' です。

DEFINE DATA LOCAL
 1   #A   (A10)
END-DEFINE
 
#A := 'baab'
 
WRITE #A #A (EM=H(6))
EXAMINE #A FOR PATTERN 'B' REPLACE 'a'
WRITE #A #A (EM=H(6))
 
END

ダブルバイト文字セットがサポートされない場合、上記のプログラムの出力は次のとおりです。

Page         1                             07-02-07    17:22:09
  												
baab    828261618282
Bab     826161828220  

これは、文字 "b"(コードページ Shift_JIS の H'8282')が 1 つの単位として扱われなかった結果です。 この文字の末尾のバイトおよびその次の文字 "a"(H'61')が、誤ってダブルバイト文字セット "B"(コードページ Shift_JIS の H'8261')として解釈されています。

ダブルバイト文字セットがサポートされる場合、プログラムの出力は予期したとおりになります。

Page         1                             07-02-07    17:22:09

baab    828261618282
baab    828261618282

Top of page