FTPによる日本語データの転送【改訂版】

※この記事はz/OS専用です

漢字など日本語文字を含むz/OS内のデータをPC側に転送する際の文字コード変換方法

転送にはFTPを使用します。3270エミュレーターのファイル転送でもいいのですが、z/OSのFTPには文字コード変換に加えて、メインフレーム特有のSO/SIコードによる桁ずれを考慮したオプション追加されているため使いやすい。

下記に紹介したサンプルは、メインフレーム側がFTPクライアント、PC側がFTPサーバーです。運用上、FTPサーバーが使えないz/OSシステムが多いですが、FTPクライアントであればサーバーと違ってシステムに常駐させる必要がなくJCLから簡単に実行できます。その代わりに、PC側でFTPサーバーを動かす必要がありますが、フリーのソフトも多く入手には困らないでしょう。文字コード変換やメインフレーム特有の処理は、z/OS側のFTPクライアントで行うため、PC側のFTPサーバーはWindowsやLinuxで利用されている一般のソフトウェアで対応できます。

    シフトJISコードに変換してz/OSからPCへデータを転送する

    IBM漢字コードからシフトJISコードに変換するには、PUTコマンドの前にSJISKANJコマンドを指示します。

    SOSIオプションは、漢字コードの前後にあるSO/SIコードを、コード変換時に取り除かずに残すことを示します。ASCII、EBCDIC、SPACEはその残し方の指定です。ASCIIの場合、SO(x0E)はx1E、SI(x0F)はx1Fにそれぞれ置き換えられます。x1Eは→、x1Fは←で表示されます
    (→と←が正しく表示できるかはPC側のソフトウェア次第)
    。EBCDICの場合、元のSO(x0E)とSI(x0F)が変換されずにそのまま残ります。SOとSIで囲まれた漢字部分はシフトJISに変換されます。SPACEの場合、SO(x0E)とSI(x0F)は空白文字(x20)に置き換えらます。これらのオプションによって、SO/SIコードの部分がバイト・データとして残るため、表示上の桁ずれが起きなくなります。PC上でも桁位置を合わせて内容を確認したい場合に便利です。

    転送前に、LOCSITEコマンドでTRAILを指示しておくと、固定長レコードの後方ブランク文字を削除せずにそのまま転送します。コード変換はしても、レコードの長さは変えたくない、といった場合に利用できます。(※テキスト・データなので各レコードの末尾に改行コード(x0D0A)だけは付加される)

    ダウンロードしたデータをメインフレーム側に戻す場合は、同じJCLを再使用してPUTコマンドをGETコマンドに替えます。ただし、ファイル名の記述位置は逆になります。

    EUCコードに変換してz/OSからPCへデータを転送する

    シフトJISではなく、EUCコードに変換する場合は、上記サンプルJCL中の「SJIS」を「EUC」に置き換えて使用します。

    UNICODEに変換してz/OSからPCへデータを転送する

    z/OSのFTPクライアントは、unicode文字に変換することもできます。UTF-8ではないので、SBCS文字も含めて1文字2バイトに変換されるため、ファイルサイズは大きくなります。ただし、WindowsやLinuxなど多くのプラットフォームで共通に利用できます。

    このサンプルは、変換後のコード・データをビッグ・エンディアンで並べますが、リトル・エンディアンで並べる場合は、「UCS2 (NOTYPE LITTLE」と指定します。

    UNICODE(UTF-8)に変換してz/OSからPCへデータを転送する

    UTF-8で符号化されたunicode文字に変換することもできます。SBCS文字がASCIIコードと同じ1バイトで格納されるので、SBCS文字が多いデータはUCS-2形式に比べファイルサイズを小さくできますが、DBCS文字(漢字、かな文字)は3バイトで格納されるため、DBCS文字ばかりのデータでは反対にUCS-2形式よりもファイルサイズが大きくなります。UTF-8で符号化されたunicodeデータは、ASCIIコードとの親和性も高い上に他言語対応も容易なため、Linuxを始めとするオープン系システムでは事実上の標準文字コードになっています。

    UTF-8へ(から)変換する場合、z/OS側のデータセットは可変長(または不定長)形式でなければなりません。固定長形式のデータセットはICEGENERで可変長データセットにコピーし、可変長形式のデータセットはDFSORTで固定長データセットにコピーすることで、レコード形式を変換することができます。

FTPクライアントの詳細は、マニュアル「z/OS Communications Server IP ユーザーズ・ガイドとコマンド(SC88-5359)」およびRedbook「IBM z/OS V2R2 Communications Server TCP/IP Implementation: Volume 2 Standard Applications(SG24-8361)」に載っています。