IFS からライブラリー・システムへデータをコピーしたいときに使うコマンドは
CPYFRMSTMF
と CPYFRMIMPF
の2 つが用意されているが、どのように違うのだろう?
どのように使い分ければよいのだろう?
F1 ヘルプを見ても IBM の説明はいつものように非常にわかりにくい。
簡単に違いを識別する方法を紹介しよう。
と、分かってしまえば簡単である。
通常、業務で使用しているファイルはデータ・ベースであるので
一般的にデータをライブラリーのデータ・ベースにコピーする場合は
CPYFRMIMPF を使う。
このとき文字コード : CCSID は IFS とデータ・ベースの CCSID を見て
自動的に変換される。
ただしすべての CCSID に対応しているかというとそうではない。
i Access (旧Client Access) の転送記述は CCSID : 1202 という UNI コードでできている。
一般的に UniCode (ユニコード) と言えば
UTF-16 1200 (半角文字は2バイト , 漢字は2バイトもしくは4バイト)
UTF-8 1208 (半角文字は1バイト , 漢字は3バイト)
が主流であるが i Access の転送記述 (.TTO, .TFR, .DTF, .DTT) はユニコードであるが
CCSID は 1202 である。
ところが IBM i は CCSID : 1202 の変換はサポートしていない。
これは API : iconv を使っても 1202 を EBCDIC に変換することはできない。
これは IBM i 内部で CCSID : 1202 の変換テーブルを保有していないためだと
推測される。
AutoWeb のデータ転送機能では CCSID : 1202 の変換もサポートしている。
これは i Access のデータ転送定義を読み取るためであるが
CCSID : 1202 と EBCDIC (5026, 5035 および 1399) との相互変換もサポートしている。
書き込みも可能である。
さらに ACS (=Access Client Solutions) の転送記述の CCSID は 1208 (UTF-8) と
IBM は製品をリリースする度に CCSID を変えて迷走しているようである。
ILE-RPG は UTF-16 : 1200 はサポートしているが 1208 はサポートしていない。
IBM が Unicode は 1200 であると主張するのであれば ACS はなぜ 1208 にしたのか
理解できない。
Unicode は Web の世界では圧倒的に UTF-8 が普及している。
UTF-8 は半角アルファベットは ASCII と同じコードで 1 バイト表示であり
コードも ASCII と同じである
しかし漢字は 3 バイト表現である。
つまり漢字だけが Unicode として表現されていて、英小文字は ASCII と同じである。
この UTF-8 が Unicode では圧倒的に普及していて、今、ご覧になっている
このサイトも charset = utf-8 として表示されている。