3.1.4 抽出したデータの文字コード変換
異なる文字コードのシステム間でデータ抽出・反映する場合,抽出したデータの文字コードを反映側の文字コードに合わせて変換できます。
ここでは,変換できる文字コードについて説明します。この機能の使用方法については,「4.2.3 データ抽出・反映の付加機能」を参照してください。
- 〈この項の構成〉
-
(1) 文字コード変換の対象となるデータ型
文字コード変換の対象となる抽出データのデータ型を次に示します。
-
CHAR※1※2※3
-
VARCHAR※1※2※3
-
MCHAR※1※3
-
MVARCHAR※1※3
-
NCHAR※1
-
NVARCHAR※1
-
SGMLTEXT※1※4
-
FREEWORD※1
- 注※1
-
ナル値情報ファイルにNOCODECONVを指定した場合,列単位にコード変換の対象から外すことができます。ナル値情報ファイルの指定方法については,「4.2.4 xtrepコマンドで指定するファイルの内容」を参照してください。
- 注※2
-
次の場合での文字集合列への反映は,文字コード変換対象となりません。
-
環境変数XTCSETUSEにyesを指定した場合
-
環境変数XTORANCSET,またはXTSQLNCSETにutf-16を指定した場合
-
- 注※3
-
環境変数XTDATALOCALEにutf-16BE,またはutf-16LEを指定して文字コード変換する場合,データ長を偶数バイトにしてください。奇数バイトの場合,エラー終了します。
- 注※4
-
HiRDBに反映しないでファイルだけを作成する場合は,BLOB属性と解釈するためにコード変換の対象外となります。ただし,次のどちらかによってコード変換対象にすることができます。
-
ナル値情報ファイルでCODECONVを指定します。
指定方法については,「4.2.4 xtrepコマンドで指定するファイルの内容」を参照してください。
-
反映情報ファイルでSGMLTEXT型を指定します。
指定方法については,「4.2.4 xtrepコマンドで指定するファイルの内容」を参照してください。
なお,作成したファイルをpdloadの入力ファイルとして使用する場合は,この方法で変換対象としてください。
-
(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文字コードの範囲を次の図に示します。
|
- 注
-
拡張外字もコード領域の文字は変換対象外です。
変換できるEUC文字コードの範囲を次の図に示します。
|
- 注※
-
外字コードは,1バイト目が0x8Fで,2バイト目以降の範囲は,0xA1A1〜0xFEFEです。
変換できる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 |
− |
− |
|
上記以外 |
− |
− |
環境変数XTUNDEF,またはXTDATAUNDEFの指定に従って変換 |
- (凡例)
-
−:文字コードを変換しません。
変換できるUTF-16文字コードの範囲を次の図に示します。なお,UTF-16にはUTF-16BEコード体系(ビッグエンディアン),UTF-16LEコード体系(リトルエンディアン)があります。
|
(4) SJISからEUCへの文字コード変換
(a) 1バイトコード
「図3-8 SJIS文字コードの範囲」の(1)〜(4)の文字コードは次のように変換します。
-
対応するEUCコードに変換します。
-
カナ文字はEUCコードでは1バイトコードになります。
-
空白文字(0x20)はそのまま空白文字(0x20)となります。
(b) 2バイトコード(SJIS標準漢字領域)
-
「図3-8 SJIS文字コードの範囲」の(6),(7)の文字コードは,対応するEUC標準漢字領域のコードに変換します。
-
空白文字(0x8140)は空白文字(0xa1a1)に変換します。
(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バイトコード
-
対応するUTF-8コードに変換します。
-
カナ文字はUTF-8コードでは3バイトコードになります。
-
空白文字(0x20)はそのまま空白文字(0x20)となります。
(b) 2バイトコード(標準文字セット)
-
対応するUTF-8の標準文字コードに変換します。
-
空白文字(0x8140)は空白文字(0xE38080)に変換します。
(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バイトコード
-
対応するUTF-16BE,またはUTF-16LEコードに変換します。
-
空白文字(0x20)は,バイトオーダによって異なります。
-
UTF-16BEの場合
空白文字(0x20)は,空白文字(0x0020)に変換します。
-
UTF-16LEの場合
空白文字(0x20)は,空白文字(0x2000)に変換します。
-
(b) 2バイトコード(標準文字セット)
-
対応するUTF-16BE,またはUTF-16LEコードに変換します。
-
空白文字(0x8140)は,バイトオーダによって異なります。
-
UTF-16BEの場合
空白文字(0x8140)は,空白文字(0x3000)に変換します。
-
UTF-16LEの場合
空白文字(0x8140)は,空白文字(0x0030)に変換します。
-
(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)の文字コードは次のように変換します。
-
対応するSJISコードに変換します。
-
カナ文字はSJISコードでは1バイトコードになります。
-
空白文字(0x20)はそのまま空白文字(0x20)となります。
(b) 2バイトコード(標準漢字コード)
-
「図3-9 EUC文字コードの範囲」の(6)の文字コードは,対応するSJIS標準漢字領域のコードに変換します。
-
空白文字(0xa1a1)は空白文字(0x8140)に変換します。
(c) 2バイトコード(外字コード)
「図3-9 EUC文字コードの範囲」の(5)の文字コードは次のように変換します。
-
文字コード変換用マッピングテーブルに従いコード変換します。なお,文字コード変換用マッピングテーブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。
-
コードセット3はHiRDB反映時にエラーになる場合があります。
(d) 2バイトコード(上記(b)(c)以外)
未定義コードとしてみなされ,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。環境変数については,「2.2.3 環境変数の設定」を参照してください。
(8) EUCからUTF-8への文字コード変換
(a) 1バイトコード
-
対応するUTF-8コードに変換します。
-
空白文字(0x20)はそのまま空白文字(0x20)となります。
(b) 2バイトコード(標準文字セット)
-
対応するUTF-8の標準文字コードに変換します。
-
カナ文字はUTF-8コードでは3バイトコードになります。
-
空白文字(0xa1a1)は空白文字(0xE38080)に変換します。
(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バイトコード
-
対応するUTF-16BE,またはUTF-16LEコードに変換します。
-
空白文字(0x20)は,バイトオーダによって異なります。
-
UTF-16BEの場合
空白文字(0x20)は,空白文字(0x0020)に変換します。
-
UTF-16LEの場合
空白文字(0x20)は,空白文字(0x2000)に変換します。
-
(b) 2バイトコード(標準文字セット)
-
対応するUTF-16BE,またはUTF-16LEコードに変換します。
-
空白文字(0xA1A1)は,バイトオーダによって異なります。
-
UTF-16BEの場合
空白文字(0xA1A1)は,空白文字(0x3000)に変換します。
-
UTF-16LEの場合
空白文字(0xA1A1)は,空白文字(0x0030)に変換します。
-
(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バイトコード
-
対応するコードに変換します。
-
空白文字(0x20)はそのまま空白文字(0x20)となります。
(b) 2バイトコードおよび3バイトコード(標準漢字コード)
-
対応する文字コードに変換します。
-
空白文字(0xE38080)は,対応する文字コードの種別によって異なります。
-
SJISの場合
空白文字(0xE38080)は,空白文字(0x8140)に変換します。
-
EUCの場合
空白文字(0xE38080)は,空白文字(0xa1a1)に変換します。
-
(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バイトコード
-
対応するUTF-16BE,またはUTF-16LEコードに変換します。
-
空白文字(0x20)は,バイトオーダによって異なります。
-
UTF-16BEの場合
空白文字(0x20)は,空白文字(0x0020)に変換します。
-
UTF-16LEの場合
空白文字(0x20)は,空白文字(0x2000)に変換します。
-
(b) 2バイトコードおよび3バイトコード(標準漢字コード)
-
対応するUTF-16BE,またはUTF-16LEコードに変換します。
-
空白文字(0xE38080)は,バイトオーダによって異なります。
-
UTF-16BEの場合
空白文字(0xE38080)は,空白文字(0x3000)に変換します。
-
UTF-16LEの場合
空白文字(0xE38080)は,空白文字(0x0030)に変換します。
-
(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バイトコード
-
対応するSJISコードに変換します。
-
空白文字は,バイトオーダによって異なります。
-
UTF-16BEの場合
空白文字(0x0020)は,空白文字(0x20)に変換します。
-
UTF-16LEの場合
空白文字(0x2000)は,空白文字(0x20)に変換します。
-
(b) 2バイトコード(外字コード)
文字コード変換用マッピングテーブルに従いコード変換します。なお,文字コード変換用マッピングテーブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。
(c) 4バイトコード(補助多言語面)
環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。
(13) UTF-16からEUCへの文字コード変換
(a) 2バイトコード
-
対応するEUCコードに変換します。
-
空白文字は,バイトオーダによって異なります。
-
UTF-16BEの場合
空白文字(0x0020)は,空白文字(0x20)に変換します。
-
UTF-16LEの場合
空白文字(0x2000)は,空白文字(0x20)に変換します。
-
(b) 2バイトコード(外字コード)
文字コード変換用マッピングテーブルに従い,コード変換します。なお,文字コード変換用マッピングテ−ブルに対応するコードが定義されていない場合は未定義コードとして,環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。文字コード変換用マッピングテーブルについては,「4.2.3 データ抽出・反映の付加機能」を参照してください。環境変数については,「2.2.3 環境変数の設定」を参照してください。
(c) 4バイトコード(補助多言語面)
-
環境変数XTUNDEF,またはXTDATAUNDEFに指定した値で変換します。
-
UTF-16に4バイトコードを検知した場合,環境変数XTUTF8UCS4CHKに指定した値でコード変換します。
(14) UTF-16からUTF-8への文字コード変換
(a) 2バイトコード
-
対応するUTF-16BE,またはUTF-16LEコードに変換します。
-
空白文字は,バイトオーダによって異なります。
-
UTF-16BEの場合
空白文字(0x0020)は,空白文字(0x20)に変換します。
-
UTF-16LEの場合
空白文字(0x2000)は,空白文字(0x20)に変換します。
-
(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への変換後の値は,次の手順で求めます。
-
Unicodeの値を16進数から2進数に変換する
-
次に示す表に従い,vの部分に1.の値を当てはめる
-
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に変換します。
-
(E000)16 = (1110000000000000)2
-
(11101110 10000000 10000000)2
-
(11101110 10000000 10000000)2 =(EE8080)16
よって,UTF-8への変換後の値は(EE8080)16となります。
-
(b) UTF-8からUnicodeへのデコード
UTF-8からUnicodeへの変換後の値は,UTF-8のエンコードと逆の手順で求めます。
-
UTF-8の値を2進数に変換する
-
表3-9に従い,1.の値を当てはめ,vの部分を取り除く
-
Unicodeの値を2進数から16進数に変換する
- 例
-
UTF-8(EE8080)16をUnicodeに変換します。
-
(EE8080)16 = (11101110 10000000 10000000)2
-
(1110000000000000)2
-
(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への変換後の値は,次の手順で求めます。
-
Unicode値から(10000)16を引く
-
1.の値を1024で割り,その商に(D800)16を加える
上位サロゲート = (1.の値 ÷ 1024) + (D800)16
-
1.の値を1024で割り,その余りに(DC00)16を加える
下位サロゲート = (1.の値 % 1024) + (DC00)16
- 例
-
Unicode(20B9F)16をUTF-16に変換します。
-
(20B9F)16 - (10000)16 = (10B9F)16
-
上位サロゲート = ((10B9F)16 ÷ 1024) + (D800)16 = (D842)16
-
下位サロゲート = ((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の値が使われます。
-
(0000)16〜(D7FF)16
-
(E000)16〜(FFFF)16
上位サロゲートが(D800)16〜(DBFF)16で,下位サロゲートが(DC00)16〜(DFFF)16の範囲のUTF-16の場合,Unicodeへの変換後の値は,次の手順で求めます。
-
上位サロゲートから(D800)16を引く
Unicode上位値 = 上位サロゲート - (D800)16
-
下位サロゲートから(DC00)16を引く
Unicode下位値 = 下位サロゲート - (DC00)16
-
1.の値に1024をかけ,2.の値,および(10000)16を足す
- 例
-
Unicode(D842 DF9F)16をUTF-16に変換します。
-
Unicode上位値 = (D842)16 - (D800)16 = (42)16
-
Unicode下位値 = (DF9F)16 - (DC00)16 = (39F)16
-
(42)16 × 1024 + (39F)16 + (10000)16 = (20B9F)16
よって,Unicodeへの変換後の値は(20B9F)16となります。
-