4.3.5 文字コードの対応の設計

文字コードの対応の設計方法について説明します。

<この項の構成>
(1) 文字コードの種類
(2) 文字コードの変換
(3) 文字コード変換の規則
(4) EBCDIK/KEISからJIS8/シフトJISへの文字コードの変換規則
(5) EBCDIK/KEISからEUCへの文字コードの変換規則
(6) EBCDIK/KEISからUTF-8への文字コードの変換規則
(7) EBCDIKからJIS8への文字コードの変換規則
(8) JIS8からEBCDIKへの文字コードの変換規則
(9) JIS8/シフトJIS又はEUCから,EBCDIK/KEISへの文字コードの変換規則
(10) JIS8/シフトJISからUTF-8への文字コードの変換規則
(11) EUCからJIS8/シフトJISへの変換規則
(12) EUCからUTF-8への文字コードの変換規則
(13) UTF-8からEUC又はJIS8/シフトJISへの文字コードの変換規則
(14) 文字コード変換の抑止
(15) 各文字コード変換規則詳細

(1) 文字コードの種類

抽出側DBと反映側DBの文字コードの種類を次に示します。

(2) 文字コードの変換

抽出側DBと反映側DBとの文字コードが異なっている場合,Datareplicatorは文字コードを定義に従って変換します。抽出側DBと反映側DBで同じ文字コードを使っている場合は,文字コードを変換する必要はありません。

(a) 反映側Datareplicatorでの文字コードの変換

反映側Datareplicatorでは,抽出側DBの文字コードを反映側DBの文字コードに対応させて変換します。反映側DBの文字コードは,反映システム定義のdblocaleオペランドで指定します。

抽出側DBがメインフレーム側DBの場合,抽出側DBの文字コードのEBCDIK/KEISの種類は,反映環境定義のebcdic_typeオペランドで指定します。

抽出側DBと反映側DBの文字コードの対応を次の表に示します。

表4-15 抽出側DBと反映側DBの文字コードの対応

抽出側DBの文字コード反映側DBの文字コード
EBCDIK/KEIS1EBCDIKJIS8/シフトJISEUC2UTF-8
EBCDIK/KEIS1
EBCDIK
JIS8/シフトJIS
EUC2
UTF-8
(凡例)
○:抽出側DBの文字コードを反映側DBの文字コードに変換できます。
-:文字コードを変換する必要はありません。
注※1
EBCDIK/KEISを扱えるのはXDM/DSとVOS3 Database Datareplicatorだけです。
注※2
コードセット0~2以外の動作は保証しません。

(3) 文字コード変換の規則

Datareplicatorでの文字コードの変換規則について説明します。

文字コードの変換方法
文字コード変換用マッピングテーブルを使って文字コードを変換します。
外字の変換方法の定義
外字の変換方法は,hdsccnvedtコマンドで文字コード変換用マッピングテーブルを編集して定義します。

(4) EBCDIK/KEISからJIS8/シフトJISへの文字コードの変換規則

(a) 1バイトコード

対応するシフトJISの文字コードに変換されます。

(b) 2バイトコード(標準文字コード)
(c) 2バイトコード(外字)

ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。

未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定値に従って,空白文字に変換されます。

(d) 空白文字

シフトコード中の空白文字は,変換されます。空白文字の変換規則(EBCDIK/KEISからJIS8/シフトJIS)を次の表に示します。

表4-16 空白文字の変換規則(EBCDIK/KEISからJIS8/シフトJIS)

EBCDIK/KEISの文字コードJIS8/シフトJISの文字コード
全角の空白文字
(A1A1)16
全角の空白文字
(8140)16
二つの連続した半角の空白文字
(40)16 (40)16
反映環境定義のshiftspace_cnvオペランドの指定値に従って,全角の空白文字又は二つの連続した半角の空白文字に変換します。
半角の空白文字
(40)16
半角の空白文字
(20)16

(5) EBCDIK/KEISからEUCへの文字コードの変換規則

(a) 1バイトコード
(b) 2バイトコード(標準文字コード)
(c) 2バイトコード(外字)

9024文字中の外字領域の後ろ8836文字を,EUC文字コードの外字領域に固定的に割り当てて変換されます。

それ以外のコードは,ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定値に従って,空白文字に変換されます。

ただし,コードセット3はSQL文の発行時にエラーになることがあります。

(d) 空白文字

空白文字は,変換されます。空白文字の変換規則(EBCDIK/KEISからEUC)を次の表に示します。

表4-17 空白文字の変換規則(EBCDIK/KEISからEUC)

EBCDIK/KEISの文字コードEUCの文字コード
全角の空白文字
(A1A1)16
全角の空白文字
(A1A1)16
二つの連続した半角の空白文字
(40)16 (40)16
反映環境定義のshiftspace_cnvオペランドの指定値に従って,全角の空白文字又は二つの連続した半角の空白文字に変換します。
半角の空白文字
(40)16
半角の空白文字
(20)16
(e) オーバフローが発生した場合の対処

半角の仮名文字は1バイトから2バイトに変換されるため,抽出対象表で半角の仮名文字を使っている場合,変換後のデータ長が長くなってオーバフローが発生することがあります。オーバフローが発生した場合の対処(EBCDIK/KEISからEUC)を次の表に示します。

表4-18 オーバフローが発生した場合の対処(EBCDIK/KEISからEUC)

発生場所Datareplicatorの動作ユーザの対処
定数,更新データSQLエラー(全バイト数の変換後に,データが定義長を超えた場合)定義長を変更して,反映処理を再実行してください。
識別子が30バイトを超えた場合,又は更新データが32,000バイトを超えた場合には,Datareplicatorは処理を続行できなくなります。このため,データ連動を開始する前に,抽出側システムをチェックして,識別子と更新データが制限値を超えないことを確認してください。

(6) EBCDIK/KEISからUTF-8への文字コードの変換規則

(a) 1バイトコード
(b) 2バイトコード(標準文字コード)
(c) 2バイトコード(外字)

ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。

未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定に従って,空白文字に変換されます。

(d) 空白文字

シフトコード中の空白文字は,変換されます。空白文字の変換規則(EBCDIK/KEISからUTF-8)を次の表に示します。

表4-19 空白文字の変換規則(EBCDIK/KEISからUTF-8)

EBCDIK/KEISの文字コードUTF-8の文字コード
全角の空白文字
(A1A1)16
全角の空白文字
(E38080)16
二つの連続した半角の空白文字
(40)16(40)16
反映環境定義のshiftspace_cnvオペランドの指定値に従って,全角の空白文字又は二つの連続した半角の空白文字に変換します。
半角の空白文字
(40)16
半角の空白文字
(20)16
(e) オーバフローが発生した場合の対処

半角の仮名文字は1バイトから3バイトに変換され,標準漢字は2バイトから3バイトに変換されるため,抽出対象表で半角仮名文字や標準漢字を使用している場合,変換後のデータ長が長くなってオーバフローが発生することがあります。

オーバフローが発生した場合の対処(EBCDIK/KEISからUTF-8)を次の表に示します。

表4-20 オーバフローが発生した場合の対処(EBCDIK/KEISからUTF-8)

発生場所Datareplicatorの動作ユーザの対処
定数,更新データSQLエラー(全バイト数の変換後に,データが定義長を超えた場合)定義長を変更して,反映処理を再実行してください。
識別子が30バイトを超えた場合,又は更新データが32,000バイトを超えた場合には,Datareplicatorは処理を続行できなくなります。このため,データ連動を開始する前に,抽出側システムをチェックして,識別子と更新データが制限値を超えないことを確認してください。
(f) 注意事項

反映側DBがHiRDBでUTF-8の場合,表にNCHAR・NVARCHAR型の列を作成できません。そのため,MCHARなど別のデータ型に格納する場合は,列データ編集UOCを使用して格納してください。

(7) EBCDIKからJIS8への文字コードの変換規則

(a) 1バイトコード

JIS8コード(1バイトコード)に変換します。文字集合指定でEBCDIKを指定した列には1バイトコードしか指定できないため,次の現象が起こる可能性があります。

(8) JIS8からEBCDIKへの文字コードの変換規則

(a) 1バイトコード

対応するEBCDIKの文字コードに変換されます。

(b) 2バイトコード(標準文字コード)

2バイトコードの1バイト目と2バイト目をそれぞれ1バイトコードとみなし,それぞれをEBCDIKの1バイトコード2文字に変換します。そのため,次の現象が起こる可能性があります。

(9) JIS8/シフトJIS又はEUCから,EBCDIK/KEISへの文字コードの変換規則

(a) 1バイトコード

対応するEBCDIK/KEISの文字コードに変換されます。

(b) 2バイトコード(標準文字コード)

対応するEBCDIK/KEISの文字コードに変換されます。

ただし,最後の文字が2バイトコードの先頭バイトの場合は,空白文字( (40)16)に変換されます。

(c) 2バイトコード(外字)

ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。

未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,空白文字( (4040)16)に変換されます。

(d) 空白文字

全角空白文字( (8140)16)は,対応する全角空白文字( (A1A1)16)に変換されます。半角空白文字( (20)16)は,対応する半角空白文字( (40)16)に変換されます。

(10) JIS8/シフトJISからUTF-8への文字コードの変換規則

(a) 1バイトコード
(b)  2バイトコード(標準文字コード)

対応するUTF-8の文字コードに変換されます。

(c) 2バイトコード(外字)

ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。

未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定に従って,空白文字に変換されます。

(d) 空白文字

シフトコード中の空白文字は,変換されます。空白文字の変換規則(JIS8/シフトJISからUTF-8)を次の表に示します。

表4-21 空白文字の変換規則(JIS8/シフトJISからUTF-8)

JIS8/SJISの文字コードUTF-8の文字コード
全角の空白文字
(8140)16
全角の空白文字
(E38080)16
半角の空白文字
(20)16
半角の空白文字
(20)16
(e) オーバフローが発生した場合の対処

半角の仮名文字は1バイトから3バイトに変換され,標準漢字は2バイトから3バイトに変換されるため,抽出対象表で半角仮名文字や標準漢字を使用している場合,変換後のデータ長が長くなってオーバフローが発生することがあります。オーバフローが発生した場合の対処(JIS8/シフトJISからUTF-8)を次の表に示します。

表4-22 オーバフローが発生した場合の対処(JIS8/シフトJISからUTF-8)

発生場所Datareplicatorの動作ユーザの対処
定数,更新データSQLエラー(全バイト数の変換後に,データが定義長を超えた場合)定義長を変更して,反映処理を再実行してください。
識別子が30バイトを超えた場合,又は更新データが32,000バイトを超えた場合には,Datareplicatorは処理を続行できなくなります。このため,データ連動を開始する前に,抽出側システムをチェックして,識別子と更新データが制限値を超えないことを確認してください。
(f) 注意事項

(11) EUCからJIS8/シフトJISへの変換規則

(a) 1バイトコード

対応するシフトJISのコードに変換されます。

(b) 2バイトコード(標準文字コード)

対応するシフトJISのコードに変換されます。最後の文字が2バイトコードの先頭バイトである場合は,空白文字((20)16)に変換されます。

(c) 2バイトコード(外字)

ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定値に従って,空白文字に変換されます。

(d) 空白文字

全角の空白文字((A1A1)16)は対応するコード((8140)16)に変換されます。2個連続する半角の空白文字((20)16)は全角空白文字((8140)16)に変換されます。1個の半角の空白文字((20)16)は対応するコード((20)16)に変換されます。

(12) EUCからUTF-8への文字コードの変換規則

(a) 1バイトコード

仮名文字を除く1バイトコードは,対応するUTF-8の文字コードに変換されます。

(b) 2バイトコード(標準文字コード)
(c) 3バイトコード(外字)

ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。

未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定に従って,空白文字に変換されます。

(d) 空白文字

シフトコード中の空白文字は,変換されます。空白文字の変換規則(EUCからUTF-8)を次の表に示します。

表4-24 空白文字の変換規則(EUCからUTF-8)

EUCの文字コードUTF-8の文字コード
全角の空白文字
(A1A1)16
全角の空白文字
(E38080)16
半角の空白文字
(20)16
半角の空白文字
(20)16
(e) オーバフローが発生した場合の対処

半角の仮名文字は2バイトから3バイトに変換され,標準漢字は2バイトから3バイトに変換されるため,抽出対象表で半角仮名文字や標準漢字を使用している場合,変換後のデータ長が長くなってオーバフローが発生することがあります。オーバフローが発生した場合の対処(EUCからUTF-8)を次の表に示します。

表4-25 オーバフローが発生した場合の対処(EUCからUTF-8)

発生場所Datareplicatorの動作ユーザの対処
定数,更新データSQLエラー(全バイト数の変換後に,データが定義長を超えた場合)定義長を変更して,反映処理を再実行してください。
識別子が30バイトを超えた場合,又は更新データが32,000バイトを超えた場合には,Datareplicatorは処理を続行できなくなります。このため,データ連動を開始する前に,抽出側システムをチェックして,識別子と更新データが制限値を超えないことを確認してください。
(f) 注意事項

(13) UTF-8からEUC又はJIS8/シフトJISへの文字コードの変換規則

(a) 1バイトコード

対応する各文字コードに変換されます。

(b) 2バイトコード及び3バイトコード(標準漢字)

対応するUTF-8の文字コードに変換されます。

(c) 3バイトコード(外字)

ユーザが作成する文字コード変換用マッピングテーブルに従って変換されます。

未定義の外字,及び文字コード変換用マッピングテーブルを作成していない場合は,反映環境定義のundefcode_cnvオペランドの指定に従って,空白文字に変換されます。

(14) 文字コード変換の抑止

任意の抽出列に対して文字コードの変換抑止を指定すると,反映側Datareplicatorでその列の文字コード変換を抑止できます。文字コード変換の抑止の指定については,「5.10 反映定義」の更新情報フィールド定義の説明を参照してください。

(15) 各文字コード変換規則詳細

(a) JIS8/シフトJISコードの変換規則

JIS8/シフトJISコードの変換規則を次の表に示します。

表4-26 JIS8/シフトJISコードの変換規則

1byte2byte3byteコード変換規則
0x00-0x80JIS8と認識し,対応するコードに変換します。
0x81-0x9F0x40-0xFC
(0x7Fを除く)
SJIS(漢字)と認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
0xA0-0xDFJIS8と認識し,対応するコードに変換します。
0xE0-0xEF0x40-0xFC
(0x7Fを除く)
SJIS(漢字)と認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
0xF0-0xFC0x40-0xFC
(0x7Fを除く)
SJIS(外字)と認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
0xFD-0xFFJIS8と認識し,対応するコードに変換します。
(b) EUCコードの変換規則

EUCコードの変換規則を次の表に示します。

表4-27 EUCコードの変換規則

1byte2byte3byteコード変換規則
0x00-0x8Dコードセット0と認識し,対応するコードに変換します。
0x8E0xA0-0xFFコードセット2(仮名文字)と認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
0x8F0xA1-0xFE0xA1-0xFEコードセット3(外字)と認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
上記以外0xA1-0xFEundefcode_cnvの指定によって変換します。
上記以外
未完全コードと認識し,変換しないでスキップします。
0x90-0x9Fコードセット0と認識し,対応するコードに変換します。
0xA00x20に変換します。
0xA1-0xFE0xA1-0xFEコードセット1(漢字)と認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
(c) EBCDIK/KEISコードの変換規則

EBCDIK/KEISコードの変換規則を次の表に示します。

表4-28 EBCDIK/KEISコードの変換規則

1byte2byte3byteコード変換規則
半角シフト中0x00-0x09対応するコードに変換します。
0x0A0x41半角シフト切り替えで,変換しません。
0x42全角シフト切り替えで,変換しません。
上記以外第1バイト,第2バイトを1バイトコードとして変換します。
未完全コードと認識し,変換しないでスキップします。
0x0B-0xFF対応するコードに変換します。
全角シフト中0x00-0x40第1バイト,第2バイトを1バイトコードとして変換します。
0x41-0xA00xA1-0xFE対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
0xA1-0xFE0xA1-0xFE対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
0xFF0x01-0xFFundefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
(d) UTF-8コードの変換規則

UTF-8コードの変換規則を次の表に示します。

表4-29 UTF-8コードの変換規則

1byte2byte3byteコード変換規則
0x00~0x7F1バイトコードと認識し,対応するコードに変換します。
0x80~0xBF0x00~0xFF0x20に変換します。
0xC2~0xDE0x80~0xFF2バイトコードと認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
0xDF0x80~0xBF2バイトコードと認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
0xE00xA0~0xFF0x80~0xFF3バイトコードと認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
上記以外0x80~0xFFundefcode_cnvの指定によって変換します。
上記以外
未完全コードと認識し,変換しないでスキップします。
0xE1~0xEE0x80~0xFF0x80~0xFF3バイトコードと認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
上記以外0x80~0xFFundefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
0xEF0x80~0xBF0x80~0xBF3バイトコードと認識し,対応するコードに変換します。
上記以外undefcode_cnvの指定によって変換します。
未完全コードと認識し,変換しないでスキップします。
上記以外0x80~0xBFundefcode_cnvの指定によって変換します。
上記以外
未完全コードと認識し,変換しないでスキップします。
上記以外undefcode_cnvの指定によって変換します。