ここでは,転記,文字列操作文などの基本機能での規則について説明します。
UTF-8はシフトJISと比較して文字の長さ(バイト数)が異なります。そのため,表示または印刷上の長さ(文字数)と実際にデータとして格納するときの長さ(バイト数)が異なります。用途がDISPLAYの項目は1バイトを1文字として扱っているため,これらの相違を考慮して確保してください。各文字コードの文字の長さを次に示します。
表26-8 各文字コードの文字の長さ(バイト数)
文字コード | 半角英数字 | 半角かたかな | 全角(日本語) |
---|---|---|---|
シフトJIS | 1 | 1 | 2 |
UTF-8 | 1 | 3 | 3 |
半角かたかなの文字コードの例を次に示します。
全角文字の文字コードの例を次に示します。
空白文字,表意定数SPACE,および転記の空白詰めの文字コードについて,次に示します。
表意定数ZEROの文字コードについて,次に示します。
Unicode機能を使用するプログラム実行時には,用途がDISPLAY/NATIONALの項目に格納される文字データはすべてUTF-8/UTF-16として処理します。たとえば,ファイルから読み込んだレコード項目にシフトJISの文字データが格納されることで,用途がDISPLAY/NATIONALの項目にUTF-8/UTF-16以外の文字データが格納される場合は,コード変換ライブラリを使用して入力データをUTF-8/UTF-16へ変換する必要があります。
コード変換ライブラリを使用してシフトJISの文字データをUTF-8へ変換するコーディング例を次に示します。
ccbl2002 -UniObjGen sample1.cbl -L /opt/hcodecnv32/lib -lhcodecnv
ccbl2002 -UniObjGen sample1.cbl -L /opt/hcodecnv/lib -lhcodecnv -brtl
ccbl2002 -UniObjGen sample1.cbl -L /opt/hcodecnv64/lib -lhcodecnv64 -brtl
ccbl2002 -UniObjGen sample1.cbl -L /opt/hcodecnv/lib -lhcodecnv
ccbl2002 -UniObjGen sample1.cbl -L /opt/hcodecnv64/lib -lhcodecnv64
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
DATA DIVISION.
WORKING-STORAGE SECTION.
*>コード変換ライブラリ提供の登録集原文の取り込み
COPY 'codeconv.cbl'.
01 CONV-TABLE-P ADDRESS.
01 DEFAULT-CODE1 PIC X(1).
01 DEFAULT-CODE2 PIC X(1).
01 TABLE-FULLPATH ADDRESS VALUE NULL.
01 MAPPING-FULLPATH ADDRESS VALUE NULL.
01 RETCODE PIC 9(9) USAGE COMP.
01 SYSTEM-ERRCODE PIC 9(9) USAGE COMP.
01 INLEN PIC 9(9) USAGE COMP.
01 INBUF PIC X(100).
01 OUTLEN PIC 9(9) USAGE COMP.
01 OUTBUF PIC X(300).
PROCEDURE DIVISION.
CALL 'CodeConvOpen' USING
BY VALUE CCF-SJIS-UTF
0
BY REFERENCE DEFAULT-CODE1
DEFAULT-CODE2
BY VALUE TABLE-FULLPATH
MAPPING-FULLPATH
BY REFERENCE RETCODE
SYSTEM-ERRCODE
RETURNING CONV-TABLE-P.
IF CONV-TABLE-P NOT = NULL THEN
COMPUTE CCT-CODECONVTABLEA = CONV-TABLE-P
:
(INBUFにシフトJISデータを格納)
:
MOVE 100 TO INLEN
MOVE 300 TO OUTLEN
CALL 'CodeConvString' USING
BY REFERENCE CCT-CODECONVTABLE
INLEN
INBUF
OUTLEN
OUTBUF
ELSE *>エラー時の処理
:
END-IF.
CALL 'CodeConvClose' USING
BY REFERENCE CCT-CODECONVTABLE
SYSTEM-ERRCODE.
DISPLAY 'INBUF=' INBUF.
DISPLAY 'OUTBUF=' OUTBUF.
EXIT PROGRAM.
用途がDISPLAYの項目と,用途がNATIONALの項目との間で変換(転記)する場合,コード変換ライブラリを使用してUTF-8とUTF-16を相互に変換する必要があります。
CSV編成ファイルを除き,入出力データは無変換とします。入出力データとは,次の機能使用時に入出力されるデータのことです。
シフトJIS範囲外の文字については,16進英数字定数または16進日本語文字定数を使用し,UTF-8またはUTF-16のコード値を直接指定してください。このとき,16進日本語文字定数は,常にUTF-16BEで指定してください。COBOL2002コンパイラは,-UniEndianオプションの指定に従い,16進日本語文字定数の文字コードを変換します。
データの比較は,文字コードによるバイナリ比較となります。そのため,用途がNATIONALの項目または日本語文字定数の大小比較はバイトオーダによって結果が異なります。