データベース抽出・反映サービス機能 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となります。