背景
HULFTを使用してIBMのメインフレームz/OSからRHELへデータ送受信をする際に、HULFTで文字コード変換はしないという要件だった。
z/OSとRHELでは文字コードが違う(z/OS: EBCDIC、RHEL: UTF-8)ため、普通にcat
コマンドで中身を見ると文字化けしてしまう。
データが正常に受信できているかを確認するのに少し手間取ったため、対応内容のメモを残しておく。
対応内容
iconvコマンドで変換
最終的にたどり着いたのはiconv
コマンドで変換するやり方だった。
こっちの方が簡単に中身を確認できる。
入力のオプション-f
には EBCDIC-IT を指定し、出力のオプション-t
には UTF-8 を指定する。
[root@hogehoge ~]# ls -l /tmp/HULFT.TESTDATA*
-rw-rw---- 1 root root 80 12月 10 13:33 /tmp/HULFT.TESTDATA
[root@hogehoge ~]#
[root@hogehoge ~]# iconv -f EBCDIC-IT -t UTF-8 /tmp/HULFT.TESTDATA -o /tmp/HULFT.TESTDATA.txt
[root@hogehoge ~]#
[root@hogehoge ~]# ls -l /tmp/HULFT.TESTDATA*
-rw-rw---- 1 root root 80 12月 10 13:33 /tmp/HULFT.TESTDATA
-rw-r--r-- 1 root root 80 12月 10 13:35 /tmp/HULFT.TESTDATA.txt
[root@hogehoge ~]#
[root@hogehoge ~]# cat /tmp/HULFT.TESTDATA.txt
HAISIN TEST [root@hogehoge ~]#
[root@hogehoge ~]#
odコマンドで変換
od
コマンドで変換し、z/OS側で出してもらった文字コードと突き合わせ or EBCDIC文字コード表と突き合わせする方法で確認できる。
1バイト単位16進数らしいので、オプション-t x1
を指定する。
確認は手間だけれど、文字コードの仕組みが見れて個人的にはちょっと楽しかった。
[root@hogehoge ~]# ls -l /tmp/HULFT.TESTDATA
合計 4
-rw-rw---- 1 root root 80 12月 10 13:33 HULFT.TESTDATA
[root@hogehoge ~]#
[root@hogehoge ~]# od -t x1 /tmp/HULFT.TESTDATA
0000000 c8 c1 c9 e2 c9 d5 40 e3 c5 e2 e3 40 40 40 40 40
0000020 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40
*
0000120
[root@hogehoge ~]#