(Translated by https://www.hiragana.jp/)
iconv - Wikipedia コンテンツにスキップ

iconv

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

iconv(アイコンブ)はことなる文字もじコードあいだ相互そうご変換へんかんおこな標準ひょうじゅんAPI。または、そのAPIに付属ふぞくする文字もじコード変換へんかんユーティリティプログラム。名前なまえは「International Codeset Conversion Library」に由来ゆらいする[1]。GNUによる実装じっそう[2]有名ゆうめいで、変換へんかんライブラリ libiconv のライセンスはLGPL変換へんかんプログラム iconv のライセンスはGPLである。

iconvのAPIは、おもにUNIX環境かんきょう文字もじれつ文字もじコード変換へんかんおこな標準ひょうじゅんインタフェースである。iconvは最初さいしょHP-UX開発かいはつされ、のちPOSIX規格きかくとして標準ひょうじゅんされた。そのため、ほとんどのUnixけいのシステムで使用しようできる。

iconv APIは文字もじコード変換へんかんプログラムのほか、既存きそんのプログラムを国際こくさいまたは多言たげんするためにももちいられる。たとえば、Samba国際こくさいにはiconvが利用りようされている。

互換ごかんせい

[編集へんしゅう]

XML処理しょりようライブラリであるlibxmlがiconvを必要ひつようとしているため、libxmlを使用しようしたアプリケーションソフトウェア利用りようする場合ばあいにもiconvを必要ひつようとする。

Microsoft Windowsうえでは、CygwinGnuWin32ひとしUnixライク環境かんきょうをインストールすることで、iconv APIやiconvプログラムを利用りようできるようになる。

プログラミング言語げんご標準ひょうじゅんライブラリにAPIがまれている場合ばあいがある。

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

日本語にほんご対応たいおうじょうきょう

[編集へんしゅう]

GNU Cライブラリのiconvでは2019ねん5がつ現在げんざいのところ、EUC-JPEUC-JIS X0213Shift_JISShift_JIS X0213CP932ISO-2022-JPISO-2022-JP-2ISO-2022-JP-1ISO-2022-JP-MSISO-2022-JP-3ひとし日本語にほんご文字もじコードに対応たいおうしている[2]。また、UnicodeのエンコーディングであるUTF-8UTF-16UTF-32UTF-7にも対応たいおうしている[2]

ふるくから使用しようされているnkfことなり、おおくの環境かんきょう標準ひょうじゅんてき使用しようできるが、一部いちぶ文字もじでnkfと変換へんかん結果けっかことなるてん注意ちゅういようする。 また、nkfに存在そんざいするエンコードの自動じどう検出けんしゅつ機能きのう存在そんざいしない。

使用しようれい

[編集へんしゅう]

とく意識いしきしていなくても、おおくの英語えいご環境かんきょうけのUNIXプログラムの内部ないぶ間接かんせつてき使用しようされているが、もちろんユーザが明示めいじてき使用しようすることもできる。

ここでは、Shift_JISのテキストファイルsjis.txtを、UTF-8に変換へんかんし、utf8.txtとして保存ほぞんする場合ばあいのコマンドのれいしめす。

シェルからiconvコマンドで変換へんかんする場合ばあい

[編集へんしゅう]

つぎのコマンドを実行じっこうすることで変換へんかんできる。

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

自作じさくプログラムからiconvライブラリを使用しよう変換へんかんする場合ばあい

[編集へんしゅう]

つぎC言語げんごソースをコンパイルし、実行じっこうすることで変換へんかんできる。

ただし、簡単かんたんのためエラー処理しょり省略しょうりゃくしているので、このまま実用じつようプログラムに使用しようしないこと。

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

#define S_SIZE (1024)

int main(void) {
  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 (1) {
    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;
}

脚注きゃくちゅう

[編集へんしゅう]

外部がいぶリンク

[編集へんしゅう]