MENU

07 IBM iと文字コード

EBCDICとCCSID

コンピュータに文字を入力したり、データとして保存したりするときには、何の文字をどんなバイト列で取り扱うかをあらかじめ取り決めておくことが必要だ。この取り決めは「文字コード」と呼ばれている。

文字コードはコンピュータの発展とともに、ANSI(米国規格協会)やISO、JISといった標準化団体など、さまざまな経路で発展を続けている。逆にさまざまな規格が存在するため、OSとしてWindowsでは日本語をShift-JISで取り扱い、LinuxではEUC-JPで取り扱うようにプラットフォームごとに異なる文字コードが使用される。

IBM iではメインフレームで使用されている「EBCDIC(拡張二進化十進コード:Extended Binary Coded Decimal Interchange Code、エビスディック)」と呼ばれる文字コードが採用されている。

プラットフォーム間でデータ連携を行う場合、自身の文字コードから相手の文字コードに正しく変換しなければならない。IBMはこのプラットフォーム間での正しいデータ連携のために文字コードの設計指針となる「CDRA(Character Data Representation Architecture)」を提唱した。

このCDRAに沿って、文字コードを一意に識別できるIDが割り振られている。このIDは「CCSID(コード化文字セットID:Coded Character Set IDentifiers)」と呼ばれている。IBMのプラットフォームやソフトウェアでは連携元と連携先のCCSIDに沿って、データ連携時の正しい文字コード変換が行われるように変換ルールが実装されている。

 

図表1 画像をクリックすると拡大します】

 

CCSIDは、図表1の3つの要素の組み合わせのそれぞれについて1つのIDが割り振られている(図表2)。要素のうち1つでも異なるものがあれば、新しいIDが割り振られる。

 

図表2 画像をクリックすると拡大します】

 

日本語OSとして
動作させる際のEBCDIC

IBM iを日本語OSとして動作させる際に利用できるEBCDICとしては「CCSID 5026」「CCSID 5035」「CCSID 1399」などがある。CCSID 5026とCCSID 5035は、2バイト文字の部分は共通だが、図表3図表4のように1バイト文字(SBCS:Single Byte Character Set)のコード・ポイントが異なる。

 

図表3 画像をクリックすると拡大します】

 

図表4 画像をクリックすると拡大します】

 

異なる部分は、いわゆる英小文字と半角カタカナのコード・ポイントだ。CCSID 5026のSBCSでは英語のSBCSで英小文字に割り当てていたコード・ポイントを半角カタカナに割り当て、英小文字のコード・ポイントは英語のSBSCとは異なるものとなっている。

一方でCCSID 5035は英語のSBCSで割り当てられていないコード・ポイント部分に半角カタカナを割り当てる。CCSID 1399はCCSID 5035のDBCS部分が拡張されたもので、JIS第三・第四水準文字も取り扱える文字コードとなる。CCSID 1399のSBCS部分はCCSID 5035のSBCS部分と同一だ。

歴史的にはIBM iではCCSID 5026が広く利用されてきたが、CCSID 5026では、JavaやC、 C++などプログラム・コードで大文字・小文字を区別するプログラムが動作しない。

CCSID 5035であれば、英小文字も英大文字も英語のSBCSと同一のコード・ポイントが割り当てられていることから、とくに問題なく動作する。WebSphere Application ServerやDB2 Web Query for iをIBM i上で稼働させる場合には、少なくともそれらのソフトウェアの動作環境部分は、CCSID 5035もしくはCCSID 1399にしなければならない。

DB2 for iにおけるCCSID

日本語OSとしてのIBM iではこれらのCCSIDが利用されるが、DB2 for iではテーブル内のカラム単位で格納するデータのCCSIDを規定できる。つまり、DB2 for iに格納するデータとしては、OSの言語設定によらず、UCS2やUTF-8、UTF-16といったさまざまな文字コードのデータを入れることができるのだ。

図表5は「あいうえお」をCCSID 1399のカラム1、UTF-16のカラム2、UTF-8のカラム3に格納している様子である。

 

図表5 画像をクリックすると拡大します】

 

いずれもSQLで通常にデータを取得した場合には「あいうえお」と表現されているが、バイト列を見ると、各文字コードに沿ったデータとして格納されていることがわかる。また、図表6のように当然だがUTF-16、UTF-8のカラムには各国語の文字を入れることもできる。

 

図表6 画像をクリックすると拡大します】

 

このように、IBM iではOSの言語環境・実行環境としてはEBCDICで設定されるが、データベース・サーバーとして利用する場合、さまざまな文字コードのデータを格納し、一度に取り扱うことができる。 [中村陽一]