2010年9月10日(金) 08:35 JST

HOME > SE的 > そろそろ2930(+1399)はいかが?

そろそろ2930(+1399)はいかが?

  • 2008年10月12日(日) 20:03 JST
  • 投稿者:
    hyahagi

タイトルが何の事かわかった方は事情通(?)ですね。(^-^;)

しばらく書き込みしていませんでしたが、今回は昔i Magazine 創刊3号に掲載いただいた記事を転載します(許可取得済み)。何の事か判らなかった方はぜひご一読を。

.



------------------ 以下転載 ------------------

言語コード2930とCCSID-1399

2006年6月20日に新しい日本語言語コードである2930がV5R4用に利用可能となった。これはAS/400、iSeries、そしてSystem iを利用するIBMの中型システム・ユーザーにとって大きな意味を持つ。

AS/400が1988年に出荷開始されて以来ほぼ18年にわたり、OS/400およびi5/OSの日本語言語コードとしては2962という一種類の言語コードのみが提供されてきた。言語コード2962は「日本語(カタカナ)」と呼ばれ、AS/400以前のIBM中型機(S/38やS/36)と互換性を持っており、RPGやCOBOLで開発された従来の5250アプリケーションを稼動させるのに適している。言語コード2962の推奨文字コード(CCSID、Coded Character Set Identifier)は5026である(CCSIDについては後述)。

一方言語コード2930の推奨CCSIDは1399であり、両者を組み合わせると、半角 (脚注1) 英小文字の利用が容易になり、クライアント・サーバーやインターネットなどのオープンな環境との親和性が高まる。V5R4以降のi5/OSを言語コード2930と組み合わせ、適切な環境設定を行なう事によって下記のメリットを享受できる。

• システム画面や印刷出力における半角文字の文字化けの解消

言語コード2930ではIBM提供画面などの半角文字のコードが変更されている。これまでの英小文字環境で発生していた文字化けが正しく表示される (脚注2) ようになる。


• 追加の文字が利用可能

言語コード2930とCCSID-1399を共に利用すれば、従来の文字セットに加えて、ユーロ通貨記号、NEC特殊文字 (脚注3) (丸付き数字、単位文字、年号、数学記号、その他)、JIS X0212(補助漢字) (脚注4) を含む文字が利用可能となる (脚注5)。また、将来の文字の増加にも対応する事ができる (脚注6)。


言語コード2962と2930の違いは?

言語コード2930について、もう少し詳しく説明しよう。言語コード(i5/OSの各国語バージョンの機能コード)とは、それぞれの言語について、日付形式、時刻形式、ソート順序、文字コードなどをセットとして定義したものである。「iSeries Information Center」 (脚注7) にはそれぞれの言語コードの定義が記載されている。言語コード2930と2962を比較すると、システム値QCCSIDの推奨値が異なっている(2930のCCSIDが1399、2962のCCSIDが5026 (脚注8) )。QKBDTYPE(キーボード・タイプ)なども異なっているが、本稿では説明を省略する。

IBMはCDRA(Character Data Representation Architecture) (脚注9) と呼ぶアーキテクチャーに基づいてコンピューターで使用する文字を定義している (脚注10)。この定義には、文字の集合を表す文字セット(Character Sets)、文字の配置を表すコード・ページ(Code Page)、コード・ページと実際のコンピューター上のコードとの対応を行う符号化方法(Encoding Scheme)などを組み合わせる。この組み合わせをCCSID(Coded Character Set Identifier)と呼び、これによって文字コードを一意に特定する。文字セットとコード・ページは、SBCS(1バイト文字)とDBCS(2バイト文字)とで別々に規定されている。通常、日本語CCSIDはSBCSとDBCSの組み合わせで構成されており、これを混合CCSIDと呼ぶ。

i5/OSで使用される主な混合CCSIDを下図に示す (脚注11)。

混合CCSID
符号化方法
文字セット
コード・ページ
概要
備考
5026
1301
EBCDIC)
SBCS
1172
290
言語コード2962での推奨CCSID
DBCS
370
300
5035
SBCS
1172
1027
DBCS
370
300
1399
SBCS
32000
1027
言語コード2930での推奨CCSID
DBCS
32000
300
943
2300
ASCII)
SBCS
32000
897
Windowsや一部のUNIXで使用されているいわゆるシフトJIS
DBCS
32000
941

従来の日本語カタカナ環境(言語コード2962)の推奨CCSIDは5026である。ただし、CCSID-5035を指定することもできる。5026と5035は文字セットとDBCSのコード・ページは同じだが、SBCSのコード・ページが、5026では290 (脚注12) 、5035では1027と異なる。使える文字はまったく同じだが、半角カタカナと半角英小文字の配置(文字コード)が異なる。コード・ページ1027の英小文字は、英語をはじめとする他の言語が利用しているコード・ページと同じ配置である。

(「IBM i Globalization」ページへのリンク。PDFが開きます。)
CCSID-1399はCCSID-5035を拡張したもので、これが言語コード2930で推奨されるCCSIDである。1399で定義されている文字セット32000 (脚注13) は「growing character set」(非限定文字セット)という特殊値であり、文字セットを限定せずにその時点における最大の文字セットが使用されることを示す。この中に、前述したWindowsなどで採用されている文字が入っており、これらを利用できるようになる。一方コード・ページはSBCSが1027、DBCSが300で、文字セットの共通部分の配置はCCSID-5035と同一である。

なお、CCSID-943はWindowsや一部のUNIXで使用されているASCII系コードであり、EBCDICとはまったく異なる文字コード体系である。

CCSID-943を除くEBCDIC文字コードの関係は下図のように表せる (脚注14) 。言語コード2962はCCSID-5026を、言語コード2930はCCSID-1399を使用して作成されている。これらのCCSIDは対応する言語コードと組み合わせて使用することが推奨されているが、前提あるいは必須条件ではない。例えば言語コード2962のみがインストールされているシステムであってもCCSID-5035やCCSID-1399をジョブのCCSIDやコード変換時に指定するCCSIDとして利用できる (脚注15)。

 

言語コード2930と2962のどちらを選ぶ?

では、言語コードとして2930と2962のどちらを選んだらいいのだろうか?

新規にSystem iおよび周辺機器を購入してアプリケーションを構築する場合は、前提や制約(採用するソリューションがCCSID-1399をサポートしない、など)がとくになければ言語コード2930を利用すべきであろう。

既存のSystem iユーザーは、冒頭で述べた言語コード2930(CCSID-1399)で実現される追加機能が必要と判断されれば移行を検討すべきである。システム的な見地からすると、日本語カタカナ(言語コード2962/CCSID-5026)から日本語英小文字(言語コード2930/CCSID-1399)への移行は、英語から仏語への移行のように大幅なシステム環境の変更になる。言語コード2962(CCSID-5026)環境で作成されたソフトウェアやデータ資産を大量に保有する場合や、レガシーなシステムとの通信、連携が主要な業務である場合は、特に慎重に計画を立ててテストを実施する必要がある。その移行の際の考慮点をいくつか挙げる。

●言語コード2962との併用
当然ながら従来の言語コード2962も引き続き発注・利用が可能である。LPARで環境を分離したり、二次言語として任意の言語コードを導入したりできるので、これらの機能を活用して複数の言語環境を用意した段階的な移行もできる。
●言語環境の設定

System i(i5/OS)は多くの場合に出荷時の言語設定のままで利用できるが、本来ユーザーがソリューションに適した言語環境を設定し、正しい組み合わせで利用すべきである。基本的に言語コードが2930であれば、システム値QCCSIDを1399に、端末のホスト・コード・ページを1399(またはそれに相当する値)に設定する。CCSID-1399に対応しない古い端末が存在する場合は更改が必要であろう。

●移行作業

既存の言語コード2962(CCSID-5026)から新しい言語コード2930(CCSID-1399)に移行するには、データベースやソース・コードの変換 およびオブジェクトの再作成などの作業が発生する。一次言語を変更しても、システムが自動的にオブジェクト内に記録された文字コードの変換を行うわけではない。ユーザーがCPYFコマンドなどで文字コードの変換を実施する必要がある。


まとめ

これまで述べた様に、新しい言語コード2930は下記の様な用途に有効と言える。

• i5/OS上でWebSphere Application ServerやDomino、HTTPサーバー、PASE(PHPやPerlなどAIXアプリケーションの動作環境)、Javaなどのオープン系ソリューションを利用
• Windowsサーバー、UNIX、他社製汎用機からi5/OSへの移行や、これらの混在環境でのSystem iの活用

「iSeries アプリケーション・イノベーション・ロードマップ」 (脚注17) で述べられている様に、今後はオープン系のソリューションがさらに重要性を増すと考えられる。将来的にi5/OSが言語コードとしてISO/IEC 10646 (脚注18) あるいはUnicode (脚注19) をサポートする可能性はあるが、しばらくは言語コード2930がこれらソリューションの普及と歩を合わせて広まって行くであろう。V5R4を導入する際には最適な言語コード環境についても再確認する事をお勧めする。



 
脚注
 
 
[1] 定義上は1文字を1バイトで表す事ができる文字集合を指し、制御コードを含めて最大256文字を表現する事ができる。「半角」は俗称(例えば2バイトの半角文字も存在する)であり、通常はSBCS(Single Byte Character Set)と呼称する。日本では英数字とカタカナが含まれる事が多いのでANK(Alphabet Numeric Kana)とも呼ばれる。同様に漢字などの2バイトで表現される文字集合をDBCS(Double Byte Character Set)と呼ぶ。
[2] 画面の機能キー部分の文字化けのみであれば、例えばジョブ属性「文字識別コードの制御」(CHRIDCTL)の設定を*JOBCCSIDに変更すれば正しく表示される。言語コード2930ではこれ以外のMRI(Machine Readable Information。機械可読情報)と呼ばれるIBM提供ソフトウェア/プログラムの文字表現部分の全てが新たに作成されている。なお、MRIやプログラムはMRM(Machine Readable Material/Medium。機械可読媒体)に記録され、磁気テープやCDとして出荷される。
[4] JIS X0212(補助漢字)の一覧はhttp://www.trickpalace.net/data/charcode/jisx0212.htmなどを参照されたい。
[5] 5250エミュレーターの「ホスト・コード・ページ」を「1399 日本語英数小文字拡張」に変更すれば画面上入力は可能である。これら拡張文字を使用する際には、データベース(正確にはデータ入力対象フィールド)CCSIDには1399を指定すべきである。異なるCCSID(例えばCCSID-5035)でタグ付けされていると拡張された文字が正しく変換されない場合がある。
[6] 実際に追加文字が利用可能か否かは、使用するクライアント(5250エミュレーターおよびWindowsなどのオペレーティング・システムのバージョンなど)i5/OSのバージョン、実行環境の組み合わせに依存する。
[8] ここに示したCCSIDは「推奨値」であり、必要であればユーザーが任意の値に変更できる。出荷時のシステム値QCCSID65535(無変換を表す特殊値)になっており、i5/OSによる暗黙的な変換の多くが抑止される。i5/OSはシステム値QCCSID65535である場合、システム値QLANGIDを基にしてCCSIDDFTCCSID)を検索する。言語コード29622930QLANGIDはともに「JPN」、対応するCCSID5026である。詳細はhttp://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/nls/rbagslngidsdefaultccsids.htmを参照されたい。
[10] CDRAや文字コードの詳細については下記を参照されたい。
[10] 他にもCCSID-930CCSID-939はパーソナル・コミュニケーションなどのホスト・コード・ページとして目にする機会が多いであろう。これらはそれぞれCCSID-5026およびCCSID-5035のスーパーセットであり、ユーザー定義文字(いわゆる外字)領域の広さが1,880から4,370に拡張されている点が異なる。
[12] 厳密に言うと、コード・ページ290(およびこれを包含するCCSID-5026)はS/38などで使用されていた伝統的な日本語EBCDIC文字コードとは異なる。現在定義されているコード・ページ290(拡張290と呼ばれることもある)は英小文字セットを含むが、古い290は英小文字セットを含んでいなかった。
[13] 文字セット32000CDRAでは65535として定義されている。
[14] CCSID-1399CCSID-5035のスーパーセットであるように、CCSID-5026のスーパーセットであるCCSID-1390も存在する。ただし、このCCSIDi5/OSではサポートされていない。詳細はhttp://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/nls/rbagsinvariantcharset.htmを参照。
[15] ただし、言語コードが推奨していないCCSIDと組み合わせて利用すると文字化けが各所で発生するなどの現象が起こるため、基本的には推奨CCSIDの利用が望ましい。
[16] データベースの入出力時には、データベースCCSIDとジョブCCSIDがいずれも65535以外であり、かつ異なるCCSIDの場合、データの一貫性を保つためにシステムが自動的に変換を試みる。予期しないパフォーマンス低下などを避けるため、言語環境の設定変更はこのメカニズムを理解したうえで行うべきである。より詳しい情報はhttp://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/nls/rbagsglobalmain.htmに紹介されている。

------------------ 以上転載 ------------------

 

機会があれば具体的な移行方法や注意点などを書きたいと思っていますが、いつになることやら...


 ここに書かれている内容は私の所属する会社、組織とは関係ありません。 内容を誰かが保証する物ではありません。

トラックバック

このエントリのトラックバックURL:
http://www.iforum.ne.jp/trackback.php/20081012200332295
表示形式
コメント投稿

コメントは投稿者の責任においてなされるものであり,サイト管理者は責任を負いません。

  • 理解の助けに…
  • 投稿者:hidehi on 2008年10月14日(火) 19:02 JST

当フォーラムの「ライブラリ」コーナーにある「CCSID について」も、ぜひ理解の参考にご参照いただけるとうれしいです。

もう端的に「ユニコード使いたかったら 2930」とか「メインが 5250 アプリケーションじゃなかったら 2930」とか言ってしまった方がわかりやすいような気もしますね。間違いではないと思いますし。

iForumサポーター

      iFourmの趣旨にご賛同いただき、ご支援いただける企業または個人を募集しています。詳しくは、info@iforum.ne.jp へお願いします。