Linkexpress 運用ガイド
目次 索引 前ページ次ページ

第5章 コード変換機能(ユーティリティ)

5.7 コード変換エラーが発生した場合の対処

コード変換エラーが発生した場合の対処として、以下の項目を説明します。

なお、実行ログは、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漢字のコード変換エラーの例]

一般的にコード変換エラーの中で、最も多いパターンとして、jef系からsjismsへのコード変換を例に説明します。変換型の指定に影響を受ける文字として、「那」を取り上げて解説します。

コード系がjefのデータ(図1)をsjis-msにコード変換する例を用いて説明を行います。コード系の詳細は、「文字コード解説書」を参照してください。

図1 jefのデータ

注) 図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漢字のコード変換型の留意点]

[コード変換を実施する環境を確認する]

コード変換を実施する環境を準備します。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]

図2 コード変換を行う環境

"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コードの漢字の変換を例として、字形/領域重視変換についての実行例を示します。

図3 字形重視型/領域重視型変換を行った結果


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 1997-2007