Object Broker Javaの機能

文字コードセット
CORBA呼び出しで文字列データを通信する場合に、サーバとクライアントとの間で、文字コードの意識が合っていることが重要です。 文字コードセットは、ネイティブコードセットとコンバージョンコードセットの2つに分けられます。
ネイティブコードセット ORBがプログラム内部で取り扱う文字コードを示します。通常は変更することはできません。
コンバージョンコードセット ネイティブコードセットに変換することが可能な文字コードを示します。
Object Broker Javaでは、以下のように設定しています。
char型、string型 wchar型、wstring型
ネイティブコードセット UCS2L1 UCS2L1
コンバージョンコードセット OSF_SJIS1 JIS_eucJP ISO8859-1 ISO646 UTF16

コードセットのネゴシエーション機能

CORBA仕様では、クライアントとサーバの間で文字および文字列のデータを受渡しするときに、どの文字コードセットを使用するかについて意識を合わせるためのネゴシエーション機能が規定されています。 コードセットのネゴシエーション機能では、おもに次の処理をおこないます。
  1. サーバ側の ORB は、通信に使用することができるコードセットをオブジェクトリファレンスに設定します。
  2. クライアント側の ORB は、オブジェクトリファレンスに設定されたコードセットが使用可能であれば、そのコードセットで通信を行います。

Caution
コードセットのネゴシエーション機能を使用するためには、IIOP および GIOP のバージョンが1.1以上である必要があります(Object Brokerは1.1もしくは1.2で動作しますので、通常は指定する必要はありません)。IIOP および GIOP のバージョンが1.0である場合は、char 型、string 型はISO8859-1 を、wchar 型、wstring 型は UCS2L1 を使用して通信します。

コンバージョンコードセットの変更

コンバージョンコードセットは、ConversionCodeSetsプロパティ、ConversionCodeSetsWプロパティを設定することによって変更することができます。

Caution
既定値の設定で通信をおこなうことが可能ですので、通常は設定を変更する必要はありません。

char型、string型のコンバージョンコードセットで指定可能なコードセットは下表のとおりです。太字は指定を変更しなかった場合の既定値です。UCS2L1はネイティブコードセットに設定されています。
コードセット名 コードセット番号 説明 エンコーディング
ISO8859-1 0x00010001 ISO 8859-1:1987; Latin Alphabet No. 1

ISO8859-2 0x00010002 ISO 8859-2:1987; Latin Alphabet No. 2 8859_2
ISO8859-3 0x00010003 ISO 8859-3:1988; Latin Alphabet No. 3 8859_3
ISO8859-4 0x00010004 ISO 8859-4:1988; Latin Alphabet No. 4 8859_4
ISO8859-5 0x00010005 ISO/IEC 8859-5:1988; Latin-Cyrillic Alphabet 8859_5
ISO8859-6 0x00010006 ISO 8859-6:1987; Latin-Arabic Alphabet 8859_6
ISO8859-7 0x00010007 ISO 8859-7:1987; Latin-Greek Alphabet 8859_7
ISO8859-8 0x00010008 ISO 8859-8:1988; Latin-Hebrew Alphabet 8859_8
ISO8859-9 0x00010009 ISO/IEC 8859-9:1989; Latin Alphabet No. 5 8859_9
ISO646 0x00010020 ISO 646:1991 IRV (International Reference Version)

UCS2L1 0x00010100 ISO/IEC 10646-1:1993; UCS-2, Level 1

JIS0201 0x00030001 JIS X0201:1976; Japanese phonetic characters JIS
JIS0208:1978 0x00030004 JIS X0208:1978 Japanese Kanji Graphic Characters JIS
JIS0208:1983 0x00030005 JIS X0208:1983 Japanese Kanji Graphic Characters JIS
JIS0208 0x00030006 JIS X0208:1990 Japanese Kanji Graphic Characters JIS
JIS0212 0x0003000a JIS X0212:1990; Supplementary Japanese Kanji Graphic Chars JIS
JIS_eucJP 0x00030010 JIS eucJP:1993; Japanese EUC EUCJIS
OSF_UJIS 0x05000010 OSF Japanese UJIS EUCJIS
OSF_SJIS1 0x05000011 OSF Japanese SJIS-1 SJIS
OSF_SJIS2 0x05000012 OSF Japanese SJIS-2 SJIS
UTF8 0x05010001 X/Open UTF-8; UCS Transformation Format 8 (UTF-8)

JVC_eucJP 0x05020001 JVC_eucJP EUCJIS
JVC_SJIS 0x05020002 JVC_SJIS SJIS
Cp437 0x100201b5 IBM-437 (CCSID 00437); PC USA Cp437
Cp850 0x10020352 IBM-850 (CCSID 00850); Multilingual IBM PC Data-MLP 222 Cp850
Cp852 0x10020354 IBM-852 (CCSID 00852); Multilingual Latin-2 Cp852
Cp855 0x10020357 IBM-855 (CCSID 00855); Cyrillic PC Data Cp855
Cp857 0x10020359 IBM-857 (CCSID 00857); Turkish Latin-5 PC Data Cp857
Cp861 0x1002035d IBM-861 (CCSID 00861); PC Data Iceland Cp861
Cp862 0x1002035e IBM-862 (CCSID 00862); PC Data Hebrew Cp862
Cp863 0x1002035f IBM-863 (CCSID 00863); PC Data Canadian French Cp863
Cp864 0x10020360 IBM-864 (CCSID 00864); Arabic PC Data Cp864
Cp866 0x10020362 IBM-866 (CCSID 00866); PC Data Cyrillic 2 Cp866
Cp869 0x10020365 IBM-869 (CCSID 00869); Greek PC Data Cp869
Cp874 0x1002036a IBM-874 (CCSID 00874); Thai PC Display Extended SBCS Cp874
Cp932 0x100203a4 IBM-932 (CCSID 00932); Japanese PC Data Mixed MS932
Cp1250 0x100204e2 IBM-1250 (CCSID 01250); MS Windows Latin-2 Cp1250
Cp1251 0x100204e3 IBM-1251 (CCSID 01251); MS Windows Cyrillic Cp1251
Cp1252 0x100204e4 IBM-1252 (CCSID 01252); MS Windows Latin-1 Cp1252
Cp1253 0x100204e5 IBM-1253 (CCSID 01253); MS Windows Greek Cp1253
Cp1254 0x100204e6 IBM-1254 (CCSID 01254); MS Windows Turkey Cp1254
Cp1255 0x100204e7 IBM-1255 (CCSID 01255); MS Windows Hebrew Cp1255
Cp1256 0x100204e8 IBM-1256 (CCSID 01256); MS Windows Arabic Cp1256
Cp1257 0x100204e9 IBM-1257 (CCSID 01257); MS Windows Baltic Cp1257
wchar 型、wstring 型で指定可能なコードセットは以下のとおりです。太字は指定を変更しなかった場合の既定値です。UCS2L1はネイティブコードセットに設定されています。
コードセット名 コードセット番号 説明 エンコーディング
UCS2L1 0x00010100 ISO/IEC 10646-1:1993; UCS-2, Level 1

UTF16 0x00010109 ISO/IEC 10646-1:1993; UTF-16, UCS Transformation Format 16-bit form

コードセットとエンコーディング

Java VMは、内部的な文字コードとしてUnicodeを用います。したがって、通信で使用されている文字コードがUnicodeではない場合、文字コードを変換する必要があります。 通信で使用されるコードセットがUCS2L1, ISO8859-1, ISO646, UTF-8, UTF-16の場合は、Object Broker Java独自の機能によってコード変換をおこないます。それ以外のコードセットが通信に使用された場合は、Javaの機能によってコード変換をおこないます。 それぞれの文字コードセットに対応するエンコーディングは上表のとおりです。また、CodeSetEncoding プロパティを設定することによって文字コードセットに対応するエンコーディング名を変更することができます。

文字化けの発生について

サーバとクライアントのうち、一方がC++、もう一方がJavaである場合、通常はコードセットのネゴシエーションによって通信に使用されるコードセットにOSF_SJIS1(シフトJIS)が選択されます。 このとき、既定値では、シフトJISとUnicodeの変換のためのエンコーディングにSJISを使用しますが、下表に示す文字で文字化けが発生する場合があります。文字化けが発生する文字が以下に該当する場合は、CodeSetEncoding プロパティに「OSF_SJIS1=MS932」と設定してください。
文字 シフトJISでのコード
0x8160
0x8161
0x817C
¢ 0x8191
£ 0x8192
¬ 0x81CA
NEC 特殊文字 0x8740 - 0x87FC
IBM 拡張文字 (NEC 選定) 0xED40 - 0xEEFC
ユーザ定義文字 (外字領域) 0xF040 - 0xF9FC
IBM 拡張文字 0xFA40 - 0xFC4B