ページの先頭行へ戻る
Interstage Charset ManagerStandard Edition V10 トラブルシューティング

3.1.2 関数のトラブル

3.1.2.1 【TRICV00004】SolarisまたはLinuxの環境において、iconv_open関数でキーワード値が正しいのに、「invalid argument」のエラーが発生します。

原因

OSのiconv関数が呼び出されているためです。

対処

標準コード変換のiconv関数を使用する場合、環境変数 "LD_LIBRARY_PATH"に "/etc/opt/FSUNiconv/lib"を設定してください。

また、libicv.soまたはlibricv.soを libc.soより先にリンクされるようにする必要があります。コンパイル時に-licvオプションまたは-lricvオプションを -lcオプションの前に指定してください。 上位プログラムがある場合、上位プログラムに対してもリンクする必要があります。リンクすることができない場合はライブラリをdlopen()で動的にライブラリを呼び出す必要があります。

メインプログラム (親 )にも標準コード変換ライブラリのリンクが必要になります。呼び出しの段階が多くなった場合でも同様で、一番上位のプログラムと、標準コード変換ライブラリを呼び出すプログラムにリンクが必要になります。

なお、Javaから標準コード変換関数を呼び出す場合は、必ずdlopen()で動的にライブラリを呼び出す必要があります。

3.1.2.2 【TRICV00005】領域外の文字を変換すると、標準コード変換ユーティリティでは代替文字のアンダースコア“_”になるのに、関数では領域外のエラーになってしまいます。

原因

標準コード変換ユーティリティでは、「未定義文字の取扱い」の指定にしたがって、領域外の文字を代替文字に変換することができます。

対処

関数で変換を行う際に同様の処理を行いたい場合には、エラーの復帰処理で代替文字に置き換える処理を実装してください。

3.1.2.3 【TRICV00006】文字コード変換表を用いた変換を行うアプリケーションを作成したところ、文字コード変換表を使用する前より処理速度が遅くなりました。

原因

文字コード変換表の処理を行うiconv_open関数を何度も呼び出している可能性があります。

対処

iconv_open関数を1回だけ呼び出すようにし、iconv関数のみを複数回呼び出すようにしてください。

3.1.2.4 【TRICV00008】64ビット版のiconv関数で、エラーが発生する場合があります。

原因

iconv関数の入力パラメタのinleftsize、outleftsizeの型はsize_t *型ですが、int *型を指定している可能性があります。

64ビット版では、size_t型は8バイト、int型は4バイトであるため、不当な値を指して、エラーが発生している可能性があります。

対処

size_t *型を指定してください。

3.1.2.5 【TRICV00009】iconv_open関数のコード系キーワード値に「UCS2」を設定したところ、「UCS2LE」ではなく「UCS2BE」で変換されます。

原因

キーワードに「UCS2」を指定した場合に、APIでは「UCS2BE」となります。

参考

なお、コマンドの場合には、環境によってLEになるかBEになるかが決まります。

  • 変換元がUCS2の場合

    “Charset Manager 使用手引書 標準コード変換機能編”の“付録I コード系キーワード値の一覧”の注18

  • 変換先がUCS2の場合

    “Charset Manager 使用手引書 標準コード変換機能編”の“付録I コード系キーワード値の一覧”の注12

対処

APIで「UCS2LE」に変換したい場合には、キーワード値に「UCS2LE」を指定してください。