Linkexpress 運用ガイド |
目次 索引 |
第5章 コード変換機能(ユーティリティ) |
コード変換エラーが発生した場合の対処として、以下の項目を説明します。
なお、実行ログは、UNIXサーバをベースとして記載しています。PCサーバの場合は、以下のとおり読み替えてください。
lxstrdbコマンド、lxcnvcdコマンド、lxcnvdatコマンドおよびlxtrndbコマンド*1でコード変換エラーが発生した場合、以下の手順でコード変換エラー箇所の特定が可能です。lxcnvcdコマンドでコード変換エラーが発生した場合を例に説明します。
*1:"-y"オプションが指定され格納連動処理が動作した場合
(1)エラーメッセージからコード変換エラー項目を特定する
エラーメッセージにコード変換エラーが発生した項目名と行番号が以下のように出力されます。
# lxcnvcd -i /space/home/d_1.dat -o /space/home/d_1.out -f /space/home/t2.tmp FSUNlnkexp:lxcnvcd: INFO: DB25001:[*,4491] コード変換処理を開始します - /space/home/d_1.dat /space/home/d_1.out FSUNlnkexp:lxcnvcd: ERROR: DB15107:[TEST1,4491] コード変換に失敗しました - OT4491 ITEM0001 18 FSUNlnkexp:lxcnvcd: INFO: DB25003:[*,4491] コード変換処理が異常終了しました |
上記エラーメッセージは、以下の情報を示しています。
table_name :OT4491
item_name :ITEM0001
line :18
入力データの18行目の1つ目の項目でコード変換エラーが発生しており、その項目について確認を行ってください。
(2)代替文字によるコード変換エラー文字を特定する
(1)のコード変換エラーが発生した際、以下の手順でコード変換エラーの文字を代替文字に置き換えて処理を継続し、正常(警告)終了することができます。
DB動作環境ファイルに以下のとおり設定し、このDB動作環境定義を使用してください。
CHARACTER_CONVERT_ERROR:CONTINUE EDIT_MESSAGE_LEVEL:LEVEL1 |
このとき、以下の代替文字(*2)が設定されます。
- 1バイト系の文字は、「_」
- 2バイト系の文字は、「_」
*2:DB動作環境ファイルにALTERNATE_CHARACTER1の指定することで、コード変換エラー時の代替文字を変更できます。
格納したデータまたは、出力されたデータの代替文字を確認することで、コード変換エラーとなった文字を特定できます。その文字について確認を行ってください。
一般的にコード変換エラーの中で、最も多いパターンとして、jef系からsjismsへのコード変換を例に説明します。変換型の指定に影響を受ける文字として、「那」を取り上げて解説します。
コード系がjefのデータ(図1)をsjis-msにコード変換する例を用いて説明を行います。コード系の詳細は、「文字コード解説書」を参照してください。
注) 図1は、説明の便宜上、2行に分けています。実際のデータは、1行目と2行目がつながっています。
図1のとおり、「那」というjefコードの漢字は、2種類存在します(フォントが異なります)。
1行目の「那」は、0x68d9 でjefの拡張漢字域にあり、新字体文字です。
2行目の「那」は、0xc6e1 でjefの第一水準漢字域にあり、旧字体文字です。
sjis-msの「那」は、0x93dfであり、sjis-msの第一水準漢字域に新字体として、1つしか存在しません。上記のような文字が、コード変換エラーになることが多く見られます。
また、"(株)"のようなベンダー文字もコード変換エラーになりやすいと言えます。ベンダー文字については、hschgtblコマンドによりコード変換テーブルを切り替えることでコード変換可能です。詳細は「5.9.8 hschgtblコマンド」を参照してください。
コード変換を実施する環境を準備します。jefからsjis-msにコード変換した場合、以下の3通りの変換型が選択可能です。
図2のように、PATHの設定、DB動作環境定義の設定およびコード変換テーブルの確認を行います。
# PATH=/usr/sbin:/usr/bin:/opt/FSUNlnkexp/bin:/opt/FSUNhscnv/usr/bin # export PATH # LXDBENV=/test/cnvcd/err/env.txt # export LXDBENV # cat ./env.txt CHARACTER_CONVERT_ERROR:CONTINUE EDIT_MESSAGE_LEVEL:LEVEL1 # hschgtbl -c Jef_Ms - d hschgtbl:INFO:HS0032: "JEF/EBCDIC" <==> "Sjisms" convert tables are .. Table kind [Standard] Vender code [undefinded] |
"hschgtbl -d"の結果は、以下の4パターンあります。
Table kind[Un-reversible] Vender code [undefinded] |
縮退変換型のコード変換テーブルかつ、ベンダ固有文字登録未テーブルを使用します。
Table kind[Un-reversible] Vender code [definded] |
縮退変換型のコード変換テーブルかつ、ベンダ固有文字登録テーブルを使用します。
Table kind[Standard] Vender code [undefinded] |
変換型のコード変換テーブルかつ、ベンダ固有文字登録未テーブルを使用します。
Table kind[Standard] Vender code [definded] |
変換型のコード変換テーブルかつ、ベンダ固有文字登録テーブルを使用します。
「那」というjefコードの漢字の変換を例として、字形/領域重視変換についての実行例を示します。
沖縄県那覇市赤嶺1丁目2 沖縄県_覇市赤嶺2丁目1 |
沖縄県_覇市赤嶺1丁目2 沖縄県那覇市赤嶺2丁目1 |
目次 索引 |