データベース抽出・反映サービス機能 HiRDB Dataextractor Version 8

[目次][索引][前へ][次へ]

3.1.4 抽出したデータの文字コード変換

異なる文字コードのシステム間でデータ抽出・反映する場合,抽出したデータの文字コードを反映側の文字コードに合わせて変換できます。

ここでは,変換できる文字コードについて説明します。この機能の使用方法については,「4.2.3 データ抽出・反映の付加機能」を参照してください。

<この項の構成>
(1) 文字コード変換の対象となるデータ型
(2) 変換できる文字コード
(3) 変換できる文字コードの範囲
(4) SJISからEUCへの文字コード変換
(5) SJISからUTF-8への文字コード変換
(6) SJISからUTF-16への文字コード変換
(7) EUCからSJISへの文字コード変換
(8) EUCからUTF-8への文字コード変換
(9) EUCからUTF-16への文字コード変換
(10) UTF-8からSJISまたはEUCへの文字コード変換
(11) UTF-8からUTF-16への文字コード変換
(12) UTF-16からSJISへの文字コード変換
(13) UTF-16からEUCへの文字コード変換
(14) UTF-16からUTF-8への文字コード変換
(15) 文字コード変換後の値の求め方

(1) 文字コード変換の対象となるデータ型

文字コード変換の対象となる抽出データのデータ型を次に示します。

注※1
ナル値情報ファイルにNOCODECONVを指定した場合,列単位にコード変換の対象から外すことができます。ナル値情報ファイルの指定方法については,「4.2.4 xtrepコマンドで指定するファイルの内容」を参照してください。

注※2
次の場合での文字集合列への反映は,文字コード変換対象となりません。
  • 環境変数XTCSETUSEにyesを指定した場合
  • 環境変数XTORANCSET,またはXTSQLNCSETにutf-16を指定した場合

注※3
環境変数XTDATALOCALEにutf-16BE,またはutf-16LEを指定して文字コード変換する場合,データ長を偶数バイトにしてください。奇数バイトの場合,エラー終了します。

注※4
HiRDBに反映しないでファイルだけを作成する場合は,BLOB属性と解釈するためにコード変換の対象外となります。ただし,次のどちらかによってコード変換対象にすることができます。

(2) 変換できる文字コード

HiRDB Dataextractorで変換できる文字コードの組み合わせを次に示します。

抽出側の文字コード 反映側の文字コード
SJIS EUC UTF-8 UTF-16BE UTF-16LE
SJIS
EUC
UTF-8
UTF-16BE
UTF-16LE

(凡例)
○:文字コードを変換します。
−:文字コードを変換しません。

注※
文字コードにUTF-16BE,UTF-16LEを指定できるのは,変換対象が表データの場合だけです。表定義情報は変換対象となりません。

(3) 変換できる文字コードの範囲

変換できるSJIS文字コードの範囲を次の図に示します。

図3-8 SJIS文字コードの範囲

[図データ]

拡張外字もコード領域の文字は変換対象外です。

変換できるEUC文字コードの範囲を次の図に示します。

図3-9 EUC文字コードの範囲

[図データ]

注※
外字コードは,1バイト目が0x8Fで,2バイト目以降の範囲は,0xA1A1〜0xFEFEです。

変換できるUTF-8文字コードの範囲を次の表に示します。

表3-8 UTF-8文字コードの範囲

第1バイト 第2バイト 第3バイト 変換規則
0x00〜0x7F 1バイトコードと認識し,対応するコードに変換
0x80〜0xBF 0x00〜0xFF 0x20に変換
0xC2〜0xDE 0x80〜0xFF 2バイトコードと認識し,対応するコードに変換
上記以外 環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換
未完全コードと認識し,変換しないでスキップ
0xDF 0x80〜0xBF 2バイトコードと認識し,対応するコードに変換
上記以外 環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換
未完全コードと認識し,変換しないでスキップ
0xE0 0xA0〜0xFF 0x80〜0xFF 3バイトコードと認識し,対応するコードに変換
上記以外 環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換
未完全コードと認識し,変換しないでスキップ
上記以外 0x80〜0xFF 環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換
上記以外
未完全コードと認識し,変換しないでスキップ
0xE1〜0xEE 0x80〜0xFF 0x80〜0xFF 3バイトコードと認識し,対応するコードに変換
上記以外 環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換
未完全コードと認識し,変換しないでスキップ
上記以外 0x80〜0xFF 環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換
未完全コードと認識し,変換しないでスキップ
0xEF 0x80〜0xBF 0x80〜0xBF 3バイトコードと認識し,対応するコードに変換
上記以外 環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換
未完全コードと認識し,変換しないでスキップ
上記以外 0x80〜0xBF 環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換
上記以外
未完全コードと認識し,変換しないでスキップ
0xF0〜0xED
  • 環境変数XTUTF8UCS4CHKの指定に従って行データをスキップし,処理を中断
  • 指定がない場合は環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換
上記以外 環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換

(凡例)
−:文字コードを変換しません。

変換できるUTF-16文字コードの範囲を次の図に示します。なお,UTF-16にはUTF-16BEコード体系(ビッグエンディアン),UTF-16LEコード体系(リトルエンディアン)があります。

図3-10 UTF-16文字コードの範囲

[図データ]

(4) SJISからEUCへの文字コード変換

(a) 1バイトコード

図3-8 SJIS文字コードの範囲」の(1)〜(4)の文字コードは次のように変換します。

(b) 2バイトコード(SJIS標準漢字領域)
(c) 2バイトコード(外字領域)

図3-8 SJIS文字コードの範囲」の(8)の文字コードは次のように変換します。

文字コード変換用マッピングテーブルに従い,コード変換します。なお,文字コード変換用マッピングテ−ブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(d) 2バイトコード(上記(b)(c)以外)

未定義コードとしてみなされ,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(5) SJISからUTF-8への文字コード変換

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

文字コード変換用マッピングテーブルに従い,コード変換します。なお,文字コード変換用マッピングテ−ブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(d) 2バイトコード(上記(b)(c)以外)

未定義コードとしてみなされ,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(6) SJISからUTF-16への文字コード変換

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

文字コード変換用マッピングテーブルに従い,コード変換します。なお,文字コード変換用マッピングテ−ブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(d) 2バイトコード(上記(b)(c)以外)

未定義コードとしてみなされ,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(7) EUCからSJISへの文字コード変換

(a) 1バイトコード

図3-9 EUC文字コードの範囲」の(1)〜(4)の文字コードは次のように変換します。

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

図3-9 EUC文字コードの範囲」の(5)の文字コードは次のように変換します。

(d) 2バイトコード(上記(b)(c)以外)

未定義コードとしてみなされ,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。環境変数については,「2.2.3 環境変数の設定」を参照してください。

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

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

文字コード変換用マッピングテーブルに従い,コード変換します。なお,文字コード変換用マッピングテ−ブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(d) 2バイトコードまたは3バイトコード(上記(b)(c)以外)

未定義コードとしてみなされ,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(9) EUCからUTF-16への文字コード変換

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

文字コード変換用マッピングテーブルに従い,コード変換します。なお,文字コード変換用マッピングテ−ブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(d) 2バイトコードまたは3バイトコード(上記(b)(c)以外)

未定義コードとしてみなされ,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(10) UTF-8からSJISまたはEUCへの文字コード変換

(a) 1バイトコード
(b) 2バイトコードおよび3バイトコード(標準漢字コード)
(c) 3バイトコード(外字コード)

文字コード変換用マッピングテーブルに従い,コード変換します。なお,文字コード変換用マッピングテ−ブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(d) 2バイトコードまたは3バイトコード(上記(b)(c)以外)

未定義コードとしてみなされ,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(e) 4バイト以上のコード

UTF-8の4バイト以上の文字コードを検知した場合,環境変数XTUTF8UCS4CHKの指定に従って動作します。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(11) UTF-8からUTF-16への文字コード変換

(a) 1バイトコード
(b) 2バイトコードおよび3バイトコード(標準漢字コード)
(c) 3バイトコード(外字コード)

UTF-8の外字コードは,UTF-8のデコード(UTF-8からUnicodeへ変換)規則と,UTF-16のエンコード(UnicodeからUTF-16へ変換)規則に従って,UTF-16の外字コードに変換します。

(d) 2バイトコードまたは3バイトコード(上記(b)(c)以外)

未定義コードとしてみなされ,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(12) UTF-16からSJISへの文字コード変換

(a) 2バイトコード
(b) 2バイトコード(外字コード)

文字コード変換用マッピングテーブルに従いコード変換します。なお,文字コード変換用マッピングテーブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(c) 4バイトコード(補助多言語面)

環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。

(13) UTF-16からEUCへの文字コード変換

(a) 2バイトコード
(b) 2バイトコード(外字コード)

文字コード変換用マッピングテーブルに従い,コード変換します。なお,文字コード変換用マッピングテ−ブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。

(c) 4バイトコード(補助多言語面)

(14) UTF-16からUTF-8への文字コード変換

(a) 2バイトコード
(b) 2バイトコード(外字コード)

UTF-16の外字コードは,UTF-16のデコード(UTF-16からUnicodeへ変換)規則と,UTF-8のエンコード(UnicodeからUTF-8へ変換)規則に従って,UTF-16の外字コードに変換します。

(c) 4バイトコード(補助多言語面)

対応するUTF-8コードに変換します。

(15) 文字コード変換後の値の求め方

ここでは,エンコード,およびデコードによる文字コード変換後の値の求め方について説明します。

(a) UnicodeからUTF-8へのエンコード

UnicodeからUTF-8への変換後の値は,次の手順で求めます。

  1. Unicodeの値を16進数から2進数に変換する
  2. 次に示す表に従い,vの部分に1.の値を当てはめる
  3. 2.の値を16進数に変換する

    表3-9 UnicodeとUTF-8の関係

    Unicode
    (16進数)
    UTF-8
    (2進数)
    1バイト目 2バイト目 3バイト目 4バイト目 5バイト目 6バイト目
    00000000〜0000007f 0vvvvvvv
    00000080〜000007ff 110vvvvv 10vvvvvv
    00000800〜0000ffff 1110vvvv 10vvvvvv 10vvvvvv
    00010000〜001fffff 11110vvv 10vvvvvv 10vvvvvv 10vvvvvv
    00200000〜03ffffff 111110vv 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv
    04000000〜7fffffff 1111110v 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv

(凡例)
−:該当しません。

Unicode(E000)16をUTF-8に変換します。
  1. (E000)16 = (1110000000000000)2
  2. (11101110 10000000 10000000)2
  3. (11101110 10000000 10000000)2 =(EE8080)16
よって,UTF-8への変換後の値は(EE8080)16となります。
(b) UTF-8からUnicodeへのデコード

UTF-8からUnicodeへの変換後の値は,UTF-8のエンコードと逆の手順で求めます。

  1. UTF-8の値を2進数に変換する
  2. 表3-9に従い,1.の値を当てはめ,vの部分を取り除く
  3. Unicodeの値を2進数から16進数に変換する

UTF-8(EE8080)16をUnicodeに変換します。
  1. (EE8080)16 = (11101110 10000000 10000000)2
  2. (1110000000000000)2
  3. (1110000000000000)2 = (E000)16
よって,Unicodeへの変換後の値は(E000)16となります。
(c) UnicodeからUTF-16へのエンコード

UnicodeからUTF-16への変換後の値の求め方は,Unicodeの値の範囲によって異なります。

(0000)16〜(FFFF)16の範囲のUnicodeは,変換後もそのままUnicodeの値(2バイト)となります。なお,(D800)16〜(DFFF)16の範囲はサロゲート用で,単独のUnicode文字コードとしては使用できないため除きます。

(10000)16以上のUnicodeは,変換後,サロゲートペア(4バイト)となります。(10000)16以上のUnicodeからUTF-16への変換後の値は,次の手順で求めます。

  1. Unicode値から(10000)16を引く
  2. 1.の値を1024で割り,その商に(D800)16を加える
    上位サロゲート = (1.の値 ÷ 1024) + (D800)16
  3. 1.の値を1024で割り,その余りに(DC00)16を加える
    下位サロゲート = (1.の値 % 1024) + (DC00)16

Unicode(20B9F)16をUTF-16に変換します。
  1. (20B9F)16 - (10000)16 = (10B9F)16
  2. 上位サロゲート = ((10B9F)16 ÷ 1024) + (D800)16 = (D842)16
  3. 下位サロゲート = ((10B9F)16 % 1024) + (DC00)16 = (DF9F)16
よって,UTF-16への変換後の値は(D842 DF9F)16となります。
(d) UTF-16からUnicodeへのデコード

UTF-16からUnicodeへの変換後の値の求め方は,UTF-16の値の範囲によって異なります。

上位サロゲートが次に示す範囲のUTF-16は,変換後もそのままUTF-16の値が使われます。

上位サロゲートが(D800)16〜(DBFF)16で,下位サロゲートが(DC00)16〜(DFFF)16の範囲のUTF-16の場合,Unicodeへの変換後の値は,次の手順で求めます。

  1. 上位サロゲートから(D800)16を引く
    Unicode上位値 = 上位サロゲート - (D800)16
  2. 下位サロゲートから(DC00)16を引く
    Unicode下位値 = 下位サロゲート - (DC00)16
  3. 1.の値に1024をかけ,2.の値,および(10000)16を足す

Unicode(D842 DF9F)16をUTF-16に変換します。
  1. Unicode上位値 = (D842)16 - (D800)16 = (42)16
  2. Unicode下位値 = (DF9F)16 - (DC00)16 = (39F)16
  3. (42)16 × 1024 + (39F)16 + (10000)16 = (20B9F)16
よって,Unicodeへの変換後の値は(20B9F)16となります。