iconv

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

iconv(アイコンブ)は異なる文字コード間の相互変換を行う標準API。または、そのAPIに付属する文字コード変換プログラム。名前は「International Codeset Conversion Library」に由来する[1]

iconv API[編集]

iconvのAPIは、おもにUNIX環境で文字列の文字コード変換を行う標準インタフェースである。iconvは最初HP-UXで開発され、後にPOSIX規格として標準化された。

iconv APIは文字コード変換プログラムのほか、既存のプログラムを国際化または多言語化するためにも用いられる。例えば、Sambaの国際化にはiconvが利用されている。

GNUのCライブラリにはフリー版のiconvが含まれ、LGPLのもとでフリーソフトとして利用できる。最近のLinuxディストリビューションは、GNUのCライブラリを標準で利用しているため、通常は新たな設定なしでiconvが利用できる。

互換性[編集]

iconvはXML処理用ライブラリであるlibxmlに必要であるため、libxmlを使用したアプリケーションソフトを利用する場合にもiconvを必要とする。

Microsoft Windows上では、CygwinGnuWin32等のUNIXライクな環境をインストールすることで、iconv APIやiconvプログラムを利用できるようになる。

プログラミング言語の標準ライブラリにAPIが組み込まれている場合がある。

PHPスクリプトからiconvの機能を利用することができる(WindowsのPHPでも付属のDLL (iconv.dll)により利用可能)。
  • バージョン1.9以前のRuby
それ以降のバージョンではそのプラットフォーム依存性から非推奨扱いになっており、String#encodeを代替とする。

日本語の対応状況[編集]

GNUのCライブラリiconvでは現在のところ、EUC-JPEUC-JISX0213Shift_JISShift_JISX0213CP932ISO-2022-JPISO-2022-JP-2ISO-2022-JP-1等の日本語の文字コードに対応している。また、Unicodeの日本語にも対応している。

古くから使用されているnkfと異なり、多くの環境で標準的に使用できるが、一部の文字でnkfと変換結果が異なる点で注意を要する。 また、nkfには存在したエンコードの自動検出機能は存在しない。

使用例[編集]

特に意識していなくても、多くの非英語環境向けのUNIXプログラムの内部で間接的に使用されているが、もちろんユーザが明示的に使用することもできる。

ここでは、Shift_JISのテキストファイルsjis.txtを、UTF-8に変換し、utf8.txtとして保存する場合のコマンドの例を示す。

シェルからiconvコマンドで変換する場合[編集]

次のコマンドを実行することで変換できる。

iconv -f Shift_JIS -t UTF-8 sjis.txt > utf-8.txt

自作プログラムからiconvライブラリを使用し変換する場合[編集]

次のC言語ソースをコンパイルし、実行することで変換できる。

但し、簡単のためエラー処理は省略しているので、このまま実用プログラムに使用しないこと。

#include <stdio.h>
#include <iconv.h>

#define S_SIZE (1024)

int main(){
  iconv_t icd;
  FILE *fp_src, *fp_dst;
  char s_src[S_SIZE], s_dst[S_SIZE];
  char *p_src, *p_dst;
  size_t n_src, n_dst;

  icd = iconv_open("UTF-8", "Shift_JIS");
  fp_src = fopen("sjis.txt", "r");
  fp_dst = fopen("utf8.txt", "w");

  while(true){
    fgets(s_src, S_SIZE, fp_src);
    if (feof(fp_src))
      break;
    p_src = s_src;
    p_dst = s_dst;
    n_src = strlen(s_src);
    n_dst = S_SIZE-1;
    while(0 < n_src){
      iconv(icd, &p_src, &n_src, &p_dst, &n_dst);
    }
    *p_dst = '\0';
    fputs(s_dst, fp_dst);
  }

  fclose(fp_dst);
  fclose(fp_src);
  iconv_close(icd);

  return 0;
}

脚注[編集]

  1. ^ Tru64 UNIX worldwide language support

外部リンク[編集]