26.5.2 入出力機能

Unicode機能では,順編成ファイル,相対編成ファイル,および索引編成ファイルについては,文字コードを意識することなく,入出力できます。しかし,テキスト編成ファイルおよびCSV編成ファイルは,ほかのアプリケーションで参照可能とするため,文字コードをUTF-8に統一します。

<この項の構成>
(1) テキスト編成ファイル
(2) CSV編成ファイル
(3) 順編成ファイル,相対編成ファイル,および索引編成ファイルを使用した入出力
(4) ACCEPT/DISPLAY文による入出力
(5) 画面入出力機能(HP-UX(IPF),AIX(32),AIX(64)で有効)
(6) プリンタへのアクセス(HP-UX(IPF),AIX(32)で有効)

(1) テキスト編成ファイル

テキスト編成ファイルでは,UTF-8で作成されたファイルの入出力ができます。この機能の規則を次に示します。

(2) CSV編成ファイル

CSV編成ファイルではUTF-8で作成されたファイルの入出力ができます。この機能の規則を次に示します。

(a) CSV編成ファイルの入出力

CSV編成ファイルを入力する場合,対象ファイルはUTF-8で作成してください。対象ファイルのレコード記述項に用途がNATIONALの項目が定義されている場合,入出力時にUTF-8/UTF-16の相互変換をします。そのため,CSV編成ファイルにUTF-8以外の文字コードが含まれる場合,動作は保証しません。CSV編成ファイルの入出力について次に示します。

CSV編成ファイルでは,用途がNATIONALの項目の文字コードをUTF-16からUTF-8に変換することで,プログラム上のサイズと実際のレコードサイズが異なります。

(例1)

      IDENTIFICATION DIVISION.
            :
      DATA DIVISION.
      FILE SECTION.
      FD FILE01.
      01 REC01 PIC X(5) USAGE DISPLAY.
      PROCEDURE DIVISION.
            :
          MOVE 'ABCDE' TO REC01.
          WRITE REC01.

この場合,データ項目「REC01」は用途がDISPLAYなので,文字コードはUTF-8であり,実際にREC01に格納されたデータとファイルに書き出されたデータサイズは等しくなります。
(例2)

      IDENTIFICATION DIVISION.
            :
      DATA DIVISION.
      FILE SECTION.
      FD FILE02.
      01 REC02 PIC N(5) USAGE NATIONAL.
      PROCEDURE DIVISION.
            :
          MOVE NC'あいうえお' TO REC02.
          WRITE REC02.

この場合,データ項目「REC02」は用途がNATIONALであり,文字コードはUTF-16なので,ファイルへ書き出すときにUTF-8に自動変換します。UTF-16(2バイトの固定)からUTF-8(可変。日本語は3バイト)に変換することで,データサイズは大きくなります。
(例3)

      IDENTIFICATION DIVISION.
            :
      DATA DIVISION.
      FILE SECTION.
      FD FILE02.
      01 REC02 PIC N(5) USAGE NATIONAL.
      PROCEDURE DIVISION.
            :
          READ  FILE02.

例2で出力したデータを入力するとき,入力データはUTF-8で15バイトですが,入力時にUTF-16に変換することで10バイトとなり,データサイズは小さくなります。
(b) Unicodeシグニチャ

CSV編成ファイルは,Unicodeシグニチャを含まないでください。CSV編成ファイルにUnicodeシグニチャが含まれる場合,データとして扱います。

(3) 順編成ファイル,相対編成ファイル,および索引編成ファイルを使用した入出力

順編成ファイル,相対編成ファイル,および索引編成ファイルを使用した入出力では,用途がNATIONALの項目についてUTF-16からUTF-8への自動変換はしません。この機能の規則を次に示します。

(4) ACCEPT/DISPLAY文による入出力

(a) ACCEPT文による入力

ACCEPT文で外部から入力したデータは,文字コードを変換しません。HP-UX(IPF),AIX(32),AIX(64)の場合,外部から入力することで,用途がDISPLAY/NATIONALの項目にUTF-8/UTF-16以外の文字データが格納されるときは,コード変換ライブラリを使用して入力データをUTF-8/UTF-16へ変換してください。なお,Linux(x86),Linux(x64)の場合,ACCEPT文で外部から入力したデータを用途がNATIONALの項目に格納できません。格納する場合の動作は保証しません。

(b) DISPLAY文による出力

DISPLAY文で用途がDISPLAY/NATIONALの項目の内容を画面上に出力するとき,文字コードは変換しません。出力する内容がUnicodeの場合,文字情報を正しく出力するためにはコード変換ライブラリを使用し文字コードを変換してください。

ただし,Linux(x86),Linux(x64)の場合,UTF-8ロケールでの動作となるため,出力する内容がUTF-8のときは文字コードの変換は必要ありません。

(c) 注意事項

DISPLAY文でファイルに出力する場合,指定した項目の用途にかかわらず,改行コードはX'0A'となります。

(5) 画面入出力機能(HP-UX(IPF),AIX(32),AIX(64)で有効)

日本語,半角かたかななど,Unicodeの多バイト文字をCOBOLプログラムから直接画面表示はできません。

(6) プリンタへのアクセス(HP-UX(IPF),AIX(32)で有効)

日本語,半角かたかななど,Unicodeの多バイト文字をCOBOLプログラムから直接印刷はできません。