サーバ/クライアント間で、プラットフォームの違いによりアプリケーションのコード系が異なる場合、コード変換を行います。コード変換を行うことにより、サーバアプリケーション、クライアントアプリケーションともに、それぞれ任意のコード系でプログラミングすることができます。
コード変換処理は、クライアント側で行います。クライアントとサーバのコード系が異なる場合、リクエスト送信時と、サーバからの返信受信時に行います。
コード変換処理の流れ
処理の流れを以下に示します。
クライアントアプリケーションは、ネーミングサービスからサーバアプリケーションのオブジェクトリファレンス(コード系情報付き)を獲得します。
クライアントアプリケーションからのリクエスト発行時、オブジェクトリファレンスに格納されたサーバアプリケーションのコード系情報とクライアントアプリケーションのコード系情報(OD_CODE_SET環境変数に設定)が異なる場合、CORBAサービス(クライアント側、またはPortable-ORB)でコード変換を行います。
CORBAサービスは、サーバアプリケーションのコード系でリクエストを送信します。
サーバアプリケーションからの返信の受信時、CORBAサービスはクライアントアプリケーションのコード系情報にあわせてコード変換を行います。
クライアントアプリケーションは、クライアント側のコード系に変換されたデータを受け取ります。
オブジェクトリファレンスまたは環境変数(OD_CODE_SET)に設定したコード系と、アプリケーションで実際に扱っている文字データのコード系に矛盾があると、コード変換は正しく動作しません。
CORBAサービスで未定義文字に対してコード変換を行った場合、未定義文字は半角のアンダースコア(“_”)になります(文字コードがUNICODEの場合、全角の未定義文字は全角のアンダースコアになります)。CORBAサービスの定義ファイルを設定することによって、未定義文字に対してコード変換を行った場合の動作を以下のとおり設定可能です。詳細については“チューニングガイド”の“config”を参照してください。
全ての未定義文字を半角のアンダースコアに変換します(デフォルト)。
半角の未定義文字は半角のアンダースコアに変換し、全角の未定義文字は全角のアンダースコアに変換します。
アプリケーションにシステム例外DATA_CONVERSIONを通知します。
Portable-ORBで未定義文字に対してコード変換を行った場合、未定義文字は半角のクエスチョン(“?”)になります。
コード変換に失敗した文字データは、文字サイズ0の文字列(“”)になります。COBOLの集団項目などを使用する場合は、桁ずれが発生するので注意が必要です。
CORBAサービスでは、コード変換機能として、当社の標準コード変換機能であるiconvを内蔵しています。
Portable-ORBでは、Java VMのコード変換クラスを使用します。
外字変換を行う場合は、ADJUSTまたはInterstage Charset Managerを用意する必要があります。
変換可能なコード系
コード変換可能なコード系の組合せは、以下のとおりです。
コード系(*1) | UNICODE | UTF8 | EUC(S90) | EUC(U90) | ShiftJIS | ShiftJIS MS | JEF ASCII | JEF英小文字 | JEFカナ | |
---|---|---|---|---|---|---|---|---|---|---|
UNICODE | UTF8(*4) | EUC | U90 | SJIS | SJISMS | JEF_ASCII | JEF_LOWER | JEF_KANA | ||
クライアント | UNICODE | - | ○ | ○ | ○ (*2) | ○ | ○ | ○ (*3) | ○ (*3) | ○ (*3) |
UTF8(*4) | ○ | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |
EUC | ○ | ○ | - | - | ○ | ○ | ○ | ○ | ○ | |
U90 | ○ | ○ | - | - | ○ | ○ | ○ | ○ | ○ | |
SJIS | ○ | ○ | ○ | ○ | - | - | ○ | ○ | ○ | |
SJISMS | ○ | ○ | ○ | ○ | - | - | ○ | ○ | ○ | |
JEF_ASCII | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - |
◯:コード変換対象 -:非対象(変換しない)
*1) 上段はコード系名称、下段はCORBAサービスで使用しているコード系指定値(OD_impl_instなどのコマンドとOD_CODE_SET環境変数で使用)を示します。コード系として“NONE”を指定すると、“コード系情報なし”とみなされ、クライアント・サーバのどちらかに指定されるとコード変換は行いません。
*2) クライアントとしてPortable-ORBを使用している場合、EUC(U90)が設定されているオブジェクトとのコード変換はできません。
*3) クライアントとしてPortable-ORBを使用している場合、以下のいずれかを使用する必要があります。なお、Interstage ApworksおよびInterstage Studioのバージョン・レベルについては、“使用上の注意”の“ソフトウェア条件”-“クライアント側のソフトウェア”-“その他”を参照してください。
Interstage Application Serverに同梱されているJDK/JRE1.4以降
Interstage Studioに添付されているJDK/JRE1.4以降
Interstage Apworksに添付されているJDK/JRE1.3以降
*4) コード系としてUTF8を指定した場合、char/stringのコード系はUTF8として扱われますが、wchar/wstringのコード系はUNICODE(UCS-2)として扱われます。
なお、コード系としてUTF8を使用する場合は、サーバ・クライアントの両方でUTF8に対応している必要があります。
データ型と開発言語
コード変換は、以下のデータ型(IDLファイルに記述されたデータ型)を対象としています。
char
wchar
string
wstring
各データ型で使用可能なコード系と開発言語の組合せを以下に示します。
コード系 | データ型 (1) | 開発言語 | (参考) | |||||
---|---|---|---|---|---|---|---|---|
Java | C | C++ | COBOL | OOCOBOL(7) | Visual Basic | |||
UNICODE | string | ○ | × | × | × | × | × | 共通(Java) |
wchar,wstring | ○ | ○ (2) | ○ (2) | ○ (3) | ○ (3) | × | ||
UTF8 | char, string | × | ○ | ○ | ○ | ○ | × | Linux |
wchar,wstring (6) | × | ○ | ○ | ○ | ○ | × | ||
EUC | char,string, | × | ○ | ○ | ○ (8) | ○ (8) | × | Solaris |
U90 | char,string, | × | ○ | ○ | ○ (8) | ○ (8) | × | Solaris |
SJIS | char,string, | × | ○ | ○ | ○ (8) | ○ (8) | × | Solaris (HP) |
SJISMS | char,string | × | ○ | ○ | ○ (8) | ○ (8) | ○ | Windows(R) |
wchar,wstring | × | ○ | ○ | ○ (8) | ○ (8) | × | ||
JEF_ASCII | char,string | × | ○ | ○ | × | × | × | グローバルサーバ (5) |
wchar,wstring | × | ○ | ○ | × | × | × |
※ ○:使用可能 ×:使用不可
char型に設定できる文字(1バイト文字)は、ASCIIコード系(EUC,U90,SJIS,SJISMSの1バイト文字)、またはEBCDICコード系(JEFコード系の1バイト文字)です。
char型のEBCDICコード系からASCIIコード系へのコード変換処理では、ASCIIコード系にない文字に変換することはできません。ASCIIコード系にない文字をコード変換する場合は、string型を使用してください。
C/C++アプリケーションでUNICODEを扱う場合、CORBA_ORB_initメソッドを始めとする各メソッドで指定するwchar/wstringの文字データがすべてUNICODEである必要があります。
COBOL/OOCOBOLアプリケーションでUNICODEを扱う場合、コード系を指定したネーミングサービスへのresolveメソッドは操作できないため、ネーミングサービスにコード系を指定しないでください(Interstage動作環境定義ファイルで“NS jp=yes”を指定しないでください)。
以下のコード系では、wchar/wstringは使用できません。
U90コード系の3バイト文字
JEFコード系とのコード変換により、グローバルサーバとの連携が可能です。実際に連携を行う場合には、グローバルサーバにINTERSTAGE(製品名:Global System Software 21)が必要です。
オブジェクトリファレンスまたは環境変数(OD_CODE_SET)にUTF8をコード系として設定した場合、char/stringのコード系はUTF8として扱われますが、wchar/wstringはUNICODE(UCS-2)として扱われます。
OOCOBOLは、Linux for Itanium、Linux for Intel64の場合、Windows(R)クライアントのみで使用できます。
OOCOBOLは、Windows Server(R) for Itanium-based SystemsおよびWindows Server(R) x64 Editionsでは使用できません。
Linuxでは、COBOL/OOCOBOLアプリケーションにおいてSJISをコード系として使用することはできません。
Linuxでは、COBOL/OOCOBOLアプリケーションにおいてEUCはNetCOBOL製品が保証する範囲内で使用することが可能です。なお、新規にシステム構築する場合には、UTF8を使用することを推奨します。
標準コード変換機能連携時に使用するコード系
ADJUSTまたはInterstage Charset Managerがインストールされている場合の、CORBAサービスが使用する標準コード変換機能のコード系は以下のとおりです。
CORBAのコード系 | 標準コード変換機能のコード系 |
---|---|
UNICODE | UTF16BE(*1) |
UTF8 | UTF8_4(*1) |
EUC | S90 |
U90 | U90 |
SJIS | sjis |
SJISMS | sjisms |
JEF_ASCII | JefAscii |
JEF_LOWER | JefAscii |
JEF_KANA | Jefkana |
*1)ADJUSTまたはInterstage Charset Managerが“UTF16BE”と“UTF8_4”のコード系をサポートしていない場合、CORBAサービスが使用するコード系は以下のとおりです。
UNICODE:UCS2
UTF8:UTF8
ADJUSTまたはInterstage Charset Managerがサポートしているコード系については、使用しているバージョンのADJUSTまたはInterstage Charset Managerのマニュアルを参照してください。
ADJUSTまたはInterstage Charset Managerのバージョンを変更する際には、コード変換テーブルの設定を使用するコード系に合わせる必要がある場合がありますのでご注意願います。コード変換テーブルの設定方法の詳細については、ADJUSTまたはInterstage Charset Managerのマニュアルを参照してください。
サーバアプリケーションでコード系を使用している場合の設定方法を説明します。
CORBAアプリケーションの場合
サーバアプリケーションで使用しているコード系をCORBAサービスに通知するため、オブジェクトリファレンスの作成時にコード系を指定します。オブジェクトリファレンスの作成方法には、以下の3つの方法があります。
Interstage管理コンソールを利用する。アプリケーションの配備画面における“ロケール”を設定してください。
OD_or_admコマンド(-Lオプションでコード系を指定)を利用する。
関数を利用する。
C言語の場合 :CORBA_BOA_create()
C++言語の場合:CORBA::BOA::create()
COBOLの場合 :CORBA-BOA-CREATE
OD_or_admコマンドで-Lオプションを省略した場合、または関数を利用した場合、以下の規則にしたがってオブジェクトリファレンスにコード系が設定されます。
OD_impl_instコマンドでサーバアプリケーションのコード系(locale)が設定された場合、この設定が使用されます。
OD_impl_instコマンドでIORのバージョンが1.1(ior=1.1)に設定され、サーバアプリケーションのコード系(locale)が未設定の場合、コード系の暗黙値が設定されます。なお、コード系の暗黙値を設定する場合は、OD_set_envコマンドの-Lオプションを使用します。
OD_impl_instコマンドでIORのバージョンが1.0(ior=1.0)に設定された場合、またはIORのバージョンが1.1(ior=1.1)でコード系の暗黙値が未定義の場合、コード系未設定となります。
指定可能なコード系については、“変換可能なコード系”(表)を参照してください。
関数を利用してオブジェクトを作成する場合は、OD_or_admコマンドで-Lオプションを省略した場合と同様のコード系が設定されます。
クライアントアプリケーションで使用しているコード系をCORBAサービスに通知するため、クライアント側で環境変数OD_CODE_SETにクライアントアプリケーションのコード系を設定します。
以下に設定方法を示します。指定可能なコード系については、“変換可能なコード系”(表)を参照してください。
> set OD_CODE_SET=コード系
% setenv OD_CODE_SET コード系
クライアントアプリケーションがJavaの場合、自動的にコード系をUNICODEと判断します。そのため、環境変数(OD_CODE_SET)を設定する必要はありません。