【COBOL学習|豆知識】現代のシステム連携の要!DISPLAY-OF関数でUnicodeとレガシーをつなぐ

導入

現代のシステム開発において、WebサービスやAPI連携は避けて通れません。しかし、COBOLが稼働する基幹システムでは、依然としてEBCDICやShift-JISなどのレガシーな文字コードが主流です。UTF-16(NATIONAL項目)で扱われる現代的なデータと、従来のDISPLAY項目との間で文字化けを起こさず、いかに安全にデータをやり取りするか。この課題を解決するために不可欠なのが、組込関数「DISPLAY-OF」です。

基礎知識

COBOLの「NATIONAL項目」は、UTF-16形式でデータを保持しており、多言語対応に適しています。一方、「DISPLAY項目」は、プログラム実行環境のコードページ(日本語環境なら多くの場合Shift-JIS)に依存した形式です。
DISPLAY-OF関数は、このNATIONAL項目のデータを指定したコードページ(例:932はShift-JIS)に変換して出力するための架け橋です。これを使うことで、内部で多言語処理を行いつつ、外部システムには従来のコード体系でデータを送出できるようになります。

実装/解決策

DISPLAY-OFを使用する際は、第二引数に「コードページ番号」を指定します。日本語環境でShift-JISに変換したい場合は「932」を指定するのが一般的です。もし第二引数を省略した場合は、実行環境のデフォルトのコードページが適用されますが、システム間のデータ連携では、予期せぬ動作を避けるためにも明示的に指定することを強く推奨します。

サンプルプログラム

以下のコードは、NATIONAL項目にあるデータをShift-JISに変換し、DISPLAY項目へ格納する一連の処理です。

000100 WORKING-STORAGE SECTION.
000200 NATIONAL項目(UTF-16データ)
000300 01 WS-NAT-DATA PIC N(10) NATIONAL VALUE N’あいうえお’.
000400 変換先のDISPLAY項目
000500 01 WS-SJIS-DATA PIC X(10).
000600
000700 PROCEDURE DIVISION.
000800 DISPLAY-OF関数を使用して変換を実行
000900 第二引数の932はShift-JISを指定
001000 MOVE FUNCTION DISPLAY-OF(WS-NAT-DATA, 932) TO WS-SJIS-DATA.
001100
001200 結果の確認
001300 DISPLAY ‘変換結果: ‘ WS-SJIS-DATA.
001400 STOP RUN.

応用・注意点

現場で最も注意すべきは「文字コード変換エラー」です。NATIONAL項目には存在する文字が、変換先のコードページ(Shift-JISなど)に存在しない場合、変換結果は「置き換え文字(多くは?)」になってしまいます。
また、変換後のデータ長にも注意が必要です。UTF-16の2バイト文字が、Shift-JISで必ずしも2バイトになるとは限りません(環境や文字種によります)。変換後のDISPLAY項目の桁数が不足すると、データが切り捨てられる可能性があるため、受け側の領域は余裕を持って定義するようにしてください。この変換の逆を行う「NATIONAL-OF」とセットで覚えておくと、システム間連携のスキルが一段と向上しますよ。

コメント

タイトルとURLをコピーしました