0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

z/OS利用時の文字コード変換 - 動作検証(1) 各ツールでの文字列表示

Last updated at Posted at 2024-02-11

はじめに

最近では、z/OS環境を使用する場合でもPCOM以外のUIを使った開発支援機能が提供されていたり、VS CodeやGitなどオープン系でも使われる技術を利用できるようになってきています。
そのような新しい技術を取り入れる場合、z/OS - オープン系の間の差異を意識しなければならない場面が多々出てきます。その中でも特に考慮が必要なのが文字コードです。
通常z/OS上では文字はEBCDICで扱われますが、オープン系の世界ではUTF-8(あるいはSJIS)で扱われることが多いです。つまりこれらの間でデータをやり取りする場合は文字コード変換が発生することになります。
英語圏の場合は問題になることは少ないかもしれませんが、日本語環境の場合色々と考慮しなければいけないことが出てきます。このシリーズでは、新しい仕組みを使ってz/OSを使っていくにあたり文字コード関連で気になる所の動作検証結果を整理していきたいと思います。基本的にはz/OS上でEBCDIC、それ以外の環境ではUTF-8でファイルを扱うことを想定します。

最初は各ツールでの文字列表示について見ていきます。

関連記事

z/OS利用時の文字コード変換 - 動作検証(1) 各ツールでの文字列表示
z/OS利用時の文字コード変換 - 動作検証(2) Git利用時のコード変換
z/OS利用時の文字コード変換 - 動作検証(3) DBBユーザー・ビルド時のコード変換
z/OS利用時の文字コード変換 - 動作検証(4) カタカナ系文字コードにおけるPDSメンバー名

環境情報

z/OS V2.4
Windows11
PCOM V14
IDz V15.0.5
VS Code V1.77.3
image.png

動作検証

image.png

今回はz/OS上のPDSメンバーに含まれる各種文字列が、使用するツールごとによってどのように表示されるかを見ていきます。
具体的には、各種文字列を含むCOBOLのソースを各ツールを使って参照した時にどのように見えるか確認していきます。ここでは、基本的にz/OS側文字コードはIBM-1399を想定します。

主な検証対象文字列

コード変換において問題になりそうな文字をいくつかピックアップしてみます。
(SJISをかまさずにEBCDIC⇔UTF-8間の変換をしている限りにおいては、問題になる文字は少ないと思いますが...)

第1~4水準

文字 UTF-8 IBM-1399 補足
あい E381E2 E381E4 4481 4482 平仮名
亜偉 E4BA9C E58189 4867 4DFB 第一水準漢字
弌仄 E5BC8C E4BB84 5641 565A 第二水準漢字
圡𡈽 E59CA1 F0A188BD B3B2 B3B1 第三水準漢字※2つめの文字はサロゲートペア
冼𠗖 E586BC F0A09796 B981 B370 第四水準漢字※2つめの文字はサロゲートペア

新JIS/旧JISでコードポイントが入れ替わっている文字

文字 UTF-8 IBM-1399 補足
鯵鰺 E9AFB5 E9B0BA 67AA 51F0
壷壺 E5A3B7 E5A3BA 589B 5077

ベンダー選定文字

文字 UTF-8 IBM-1399 補足
ⅠⅡ E285A0 E285A1 41F1 41F2
ⅰⅱ E285B0 E285B1 41B1 41B2
①② E291A0 E291A1 E270 E271
㈱℡ E388B1 E284A1 446D 446F
E288A0 434B
E28992 435C
E288B5 4478

半角記号

文字 UTF-8 IBM-1399 IBM-1390 補足
~ 7E A1 A0 チルダ
E280BE A0 A1 オーバーライン
\ 5C E0 B2 バックスラッシュ
¥ C2A5 B2 5B
$ 24 5B E0 ドル
^ 5E B0 B0 キャレット
¬ C2AC 5F 5F Notシンボル

半角英字/カタカナ

文字 UTF-8 IBM-1399 IBM-1390 補足
AB 41 42 C1 C2 C1 C2 半角英大文字
ab 61 62 81 82 62 63 半角英小文字
アイ EFBDB1 EFBDB2 59 62 81 82 半角カタカナ
参考:SBCSコードポイント表/CCSID 939/1399(英小文字系)

image.png

参考:SBCSコードポイント表/CCSID 930/1390(カタカナ系)

image.png

(1)PCOM

設定

ホスト・コード・ページで 1399 日本語英数小文字拡張(JIS2004)を指定
image.png

表示

3.4でPDSメンバー表示
image.png

HEX ONの表示
image.png

特に問題なく表示できています。

(2)VS Code

設定

z/OSMF接続のプロファイルで"encoding": "IBM-1399"を指定
image.png

表示

Zowe ExplorerでPDSメンバー表示
image.png

特に問題なく表示できています。

Hex表示で見てみます (Hex Editorを使用)
image.png

VS Codeでは一旦ローカルにコード変換(EBCDIC⇒UTF-8)したファイルを保存してそれを編集することになります。そのため、その一時ファイルをHex Editorで見るとUTF-8のコードになっています。

(3)IDz

2023年4月時点ではIDzの最新版であるV16.0.0はコードページIBM-1390/IBM-1399がサポートされていませんでした。そのためここではIDz V15を使用して検証しています。
参考: APAR:PH53829
⇒ 2023/06/12 にFixが提供され、APARはCloseされました。
この修正はz/OS Explorerの3.3.2に含まれて提供されます。
https://www.ibm.com/support/pages/node/713167
この修正はIDz16.0.2クライアントにも含まれます(IDz16.0.2にはz/OS Exlorer3.3.2が含まれています)。
ただし、この修正はMVSデータセットに関する指定に関する修正のみで、z/OS Unix上のファイルについては2024年2月現在でもIBM-1390/IBM-1399がサポートされていません...

設定

MVSファイルのプロパティーのホスト・コードページでIBM-1399、ローカル・コード・ページでUTF-8を指定
image.png

表示

zSystems LPEXエディターで開く
image.png

一部第三水準の文字が化けてます...

HEXで見てみます。(LPEXエディターでAlt+Shift+H)
image.png

※これは直接ホスト上のPDSメンバーを見ていることになっていますが、恐らくVS Codeと同様に内部的には一旦PC上に持ってきてUTF-8に変換してエディターで表示させているのではないかと思われ、LPEXエディターのHEX表示機能は、UTF-8をベースに他のコードに変換した場合のコードを表示しているものと思われます。文字列表示や他コードページのHEX表示について、UTF-8のサロゲートペアのハンドリングがうまくいっていないのではないかと推察されます。(要調査)

(4)おまけ:teraterm(SSHクライアント)

設定

image.png

※SSH接続の場合EBCDIC⇔ASCII変換をしてくれる。ただし日本語には対応していない。とりあえず文字コードとしてはASCIIなのでSJIS/UTF-8あたりを指定。

表示

例えば、catコマンドで対象のPDSメンバーを表示させてみると想定通り文字化けします。
(一応やってみただけ)

TAGUCHI : /u/TAGUCHI : > cat "//'TAGUCHI.TEST01.COBOL.SOURCE(TSUB04)'"
       IDENTIFICATION DIVISION.
       PROGRAM-ID. TSUB04.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.

       LINKAGE SECTION.
       01 PARM04.
           COPY 'CPPARM$4'.

       PROCEDURE DIVISION USING PARM04.

           DISPLAY '--- BEGIN TSUB04'
           DISPLAY '濛瀉 酣ィロ 釞。 﨧・キ」 セ盥'
           ISPLAY 'ナ。ー 鴈コヲマ'
           DISPLAY ' ア イ  」 ・ モノ 濱ソ 琅ョ ェ 萵フ'
           DISPLAY 'AB ab ゚ツ'
           DISPLAY '~ オ \ ・ $ ャ ^'
           MOVE "XXXXX" TO ITEM04-01.
           MOVE "YYYYY" TO ITEM04-02.

           DISPLAY '--- END TSUB04'

      *****************************************************
           GOBACK.
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?