QNTCに作成されるファイルのCCSIDについて
Question
弊社では、IBM i(AS/400)からWindowsサーバーに対してCPYTOIMPFを使用してファイルをコピーしています。
文字コードをUTF-8にする必要がある為、STMFCCSID(1208) を指定して実行しているのですが、ファイルの上書きをしようとすると、エラー「CPF2845 理由コード 1 によりコピーが完了しませんでした。」が発生します。
なお、Windowsサーバー側にあるファイルを削除して再実行すると正常に実行されます。
CPYTOIMPFで作成されたファイルはUTF-8で作成されていますが、どうしてこのような事になるのでしょうか。
Answer
IBM i(AS/400)からWindowsサーバーにファイルをコピーしているという事は、QNTCを使用されているかと思います。
まず、エラー「CPF2845 理由コード 1 によりコピーが完了しませんでした。」についてですが、理由コード1とありますので、原因は「1 - CCSID またはコード・ページの値が無効である」、つまりCCSIDが、コマンドで指定している値と既存ファイルの属性とで値が異なっているために発生する理由コードになります。
では次に、どうして同じコマンドを実行しているのにCCSIDが異なってしまうのでしょう。これは、QNTCを使用しているための制約になります。
QNTCは、外部の共有フォルダを使用するためのディレクトリですが、IBM i(AS/400)から外部のデータの文字コードまでは取得することができません。
そのため、IBM i(AS/400)のネットサーバーのCCSIDを使用する動きがあるようです。
これは、QNTCを使用する場合の制約と考えられます。
上書きする運用ではなく、リネームするか、コピー前に削除するような運用をご検討いただければと思います。
by かんぴょう木綿さん