CCSIDの話
CCSIDやコードページという言葉は、何度か聞いたことはあると思いますが、正確に理解している方は少ないのではないでしょうか。
CCSIDはあるバージョンから加えられた属性であると思われますが、正確にどのバージョンからかは記憶していません。
(ヘルプを見ていくとV2R3からCCSIDが加わったと推測できます。←あくまでも推測ですが、、、)
日本語環境でAS/400を使用する場合、65535と5035のどちらかを使用します。
早くからAS/400を使用しているユーザーでは、そのまま65535(中身的には5026)で使用しているケースが多いと思いますが、
最近導入したユーザーやERP,WEB系アプリを乗せているマシンでは、5035を使用するといった傾向が見受けられます。
マニュアルを読んでも内容の理解ができないので、自分なりに検証を行い理解を深めてみました。
(これ以降の記事はすべて日本語環境において記述しています)
まず、システムで属性としてCCSID、コードページ、文字識別コードの設定する場所を探してみましょう。
■図1)CCSIDに関連する設定値■
大体、このような属性が見つかるかと思います。これだけの個所で設定があると、何処でどのように関連するかがかなり複雑なので、わかる範囲でどのように関連しているかを検証してみました。
【実験1:エミュレータの設置とDEVDの関係】
エミュレータの「ホストコードページ」に連動して、DEVDの「文字識別コード」は自動的に書き換わるようです。
結果は、以下のようになりました。
以上の結果で、AS/400の画面記述上では、小文字主体の文字コードとカナ主体の文字コードの2種類しかないことがわかります。
【実験2:エミュレータ設定とJOBのCCSIDとDBのCCSIDの関係】
今度は、エミュレータの「ホストコードページ」の設定とJOBの「CCSID」とDBの「CCSID」との関係について、小文字の表示・入力、カナの表示・入力について検証してみました。
システム値CCSID=65535で設定していて、DBに小文字を持っていないユーザーではエミュレータのコードページの設定はどれを使用しても問題ないことがわかります。
また冒頭で述べた「ERP,WEB系アプリを乗せているマシンでは、5035を使用するといった傾向が見受けられます。」
の理由としてDBのCCSIDが5035であったり、DBに小文字が含まれる事による理由であることがわかります。
あと、65535(5026)のCCSIDでは同一DB上に小文字とカナが混在することはできないと勘違いしているユーザーが多い(*1)ですが、
この実験からそれは誤解だということがわかります。エミュレータの「ホストコードページ」を930日本語英数カナ拡張にすることにより可能です。
(*1)ユーザーへデモをしててもそのようなことを伺います。
上記の表で「小文字のコマンド入力の認識」という列がありますが、OS/400が英語圏のCCSIDでは小文字でのコマンド入力が可能であることがわかります。
ちなみにカナ系のホストコードページでの小文字入力ではEBCIDICのコードマッピングの違いにより認識できないようです。
以下の図での水色部分が小文字にマッピングされている範囲です。
■図2)CCSID=5026のANKのテーブル■

■図3)CCSID=5035のANKのテーブル■

【実験3:1390,1399のコードページを試してみる】
IBMの資料では93xは旧JISで139xは新JISということのようです。
93xで表示できなかった以下のような文字がエミュレータ上で表示できるようになったようです。

気をつけないといけないのは、5400-L10などのLAN直結プリンターでホストコードページを139xを設定できないプリンターがあります。
入力したものが印刷できないことが発生してしまわないように環境をすべて確認してから使用したほうが良いでしょう。
以下の画面の例では、コマンドラインで入力後に実行キーを押して、入力と表示(メッセージ上でも表示されている)が認識されていることがわかります。

【考察】
マニュアルで調べたわけではありませんが、今回の実験から以下の表のような関係が成り立つかと思います。
CCSIDはあるバージョンから加えられた属性であると思われますが、正確にどのバージョンからかは記憶していません。
(ヘルプを見ていくとV2R3からCCSIDが加わったと推測できます。←あくまでも推測ですが、、、)
日本語環境でAS/400を使用する場合、65535と5035のどちらかを使用します。
早くからAS/400を使用しているユーザーでは、そのまま65535(中身的には5026)で使用しているケースが多いと思いますが、
最近導入したユーザーやERP,WEB系アプリを乗せているマシンでは、5035を使用するといった傾向が見受けられます。
マニュアルを読んでも内容の理解ができないので、自分なりに検証を行い理解を深めてみました。
(これ以降の記事はすべて日本語環境において記述しています)
まず、システムで属性としてCCSID、コードページ、文字識別コードの設定する場所を探してみましょう。
■図1)CCSIDに関連する設定値■
| No | 設定場所(OBJ) | 設定パラメータ | 値 | |
| 1 | システム値 | コード化文字セット識別コード | QCCSID | 65535 5035 |
| 2 | グラフィック文字セットおよびコード・ページ | QCHRID | 1172-290 1172-1027 | |
| 3 | 文字識別コード制御 | QCHRIDCTL | *DEVD *SYSVAL *JOBCCSID *CHRIDCTL | |
| 4 | ファイル属性(DB) | コード化文字セット識別コード | CCSID | 5026 5035 |
| 5 | ファイル属性(PRTF) | グラフィック文字セットおよびコード・ページ | CHRID | *DEVD *SYSVAL *JOBCCSID *CHRIDCTL 1172-290 1172-1027 |
| 6 | スプール属性 | 文字識別コード (図形文字セット、コード・ページ) | CHRID | *DEVD 1172-290 1172-1027 |
| 7 | JOB属性 | コード化文字セット識別コード | CCSID | 65535 5035 |
| 8 | JOB属性 | 省略時のコード化文字セット識別コード | 5026 5035 | |
| 9 | JOB属性 | 文字識別コード制御 | CHRIDCTL | *DEVD *JOBCCSID |
| 10 | DEVD (TYPE=5555,5553) | 文字識別コード | CHRID | *KBDTYPE *SYSVAL 1172-290 1172-1027 |
| 11 | エミュレータ | ホストコードページ | 930日本語英数カナ 930日本語英数カナ拡張 939日本語英数小文字拡張 1390日本語英数カナ拡張 1399日本語英数小文字拡張 |
大体、このような属性が見つかるかと思います。これだけの個所で設定があると、何処でどのように関連するかがかなり複雑なので、わかる範囲でどのように関連しているかを検証してみました。
【実験1:エミュレータの設置とDEVDの関係】
エミュレータの「ホストコードページ」に連動して、DEVDの「文字識別コード」は自動的に書き換わるようです。
結果は、以下のようになりました。
| エミュレータ「ホストコードページ」 | DEVD「文字識別コード」 |
| 930日本語英数カナ | 1172-290 |
| 930日本語英数カナ拡張 | 1172-290 |
| 939日本語英数小文字拡張 | 1172-1027 |
| 1390日本語英数カナ拡張 | 1172-290 |
| 1399日本語英数小文字拡張 | 1172-1027 |
以上の結果で、AS/400の画面記述上では、小文字主体の文字コードとカナ主体の文字コードの2種類しかないことがわかります。
【実験2:エミュレータ設定とJOBのCCSIDとDBのCCSIDの関係】
今度は、エミュレータの「ホストコードページ」の設定とJOBの「CCSID」とDBの「CCSID」との関係について、小文字の表示・入力、カナの表示・入力について検証してみました。
| エミュレータ「ホストコードページ」 | JOB CCSID | 5026のDBの表示 | 5026のDBへ入力 | 5035のDBの表示 | 5035のDBへ入力 | 小文字でのコマンド入力の認識 | ||||
| カナ | 小文字 | カナ | 小文字 | カナ | 小文字 | カナ | 小文字 | |||
| 930日本語英数カナ | 65535 | ○ | × | ○ | × | ○ | × | ○ | × | × |
| 5035 | × | × | × | × | ○ | × | ○ | × | × | |
| 930日本語英数カナ拡張 | 65535 | ○ | ○ | ○ | ○ | △ | △ | × | × | × |
| 5035 | △ | △ | × | × | △ | △ | × | × | × | |
| 939日本語英数小文字拡張 | 65535 | △ | △ | × | × | ○ | ○ | ○ | ○ | ○ |
| 5035 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |
| ○:Ctrl+F3の切替なしに可能、△:Ctrl+F3の切替をすれば可能になった、×:不可 |
システム値CCSID=65535で設定していて、DBに小文字を持っていないユーザーではエミュレータのコードページの設定はどれを使用しても問題ないことがわかります。
また冒頭で述べた「ERP,WEB系アプリを乗せているマシンでは、5035を使用するといった傾向が見受けられます。」
の理由としてDBのCCSIDが5035であったり、DBに小文字が含まれる事による理由であることがわかります。
あと、65535(5026)のCCSIDでは同一DB上に小文字とカナが混在することはできないと勘違いしているユーザーが多い(*1)ですが、
この実験からそれは誤解だということがわかります。エミュレータの「ホストコードページ」を930日本語英数カナ拡張にすることにより可能です。
(*1)ユーザーへデモをしててもそのようなことを伺います。
上記の表で「小文字のコマンド入力の認識」という列がありますが、OS/400が英語圏のCCSIDでは小文字でのコマンド入力が可能であることがわかります。
ちなみにカナ系のホストコードページでの小文字入力ではEBCIDICのコードマッピングの違いにより認識できないようです。
以下の図での水色部分が小文字にマッピングされている範囲です。
■図2)CCSID=5026のANKのテーブル■

■図3)CCSID=5035のANKのテーブル■

【実験3:1390,1399のコードページを試してみる】
IBMの資料では93xは旧JISで139xは新JISということのようです。
93xで表示できなかった以下のような文字がエミュレータ上で表示できるようになったようです。

気をつけないといけないのは、5400-L10などのLAN直結プリンターでホストコードページを139xを設定できないプリンターがあります。
入力したものが印刷できないことが発生してしまわないように環境をすべて確認してから使用したほうが良いでしょう。
以下の画面の例では、コマンドラインで入力後に実行キーを押して、入力と表示(メッセージ上でも表示されている)が認識されていることがわかります。

【考察】
マニュアルで調べたわけではありませんが、今回の実験から以下の表のような関係が成り立つかと思います。
| エミュレータ「ホストコードページ」 | AS「コードページ」 | 表示CCSID |
| 930日本語英数カナ | 290(カナ主体) | 932(旧JIS) |
| 930日本語英数カナ拡張 | 290(カナ主体) | 932(旧JIS) |
| 939日本語英数小文字拡張 | 1027(小文字主体) | 932(旧JIS) |
| 1390日本語英数カナ拡張 | 290(カナ主体) | 943(新JIS) |
| 1399日本語英数小文字拡張 | 1027(小文字主体) | 943(新JIS) |