Iconv

iconvとは



iconv(アイコンブ)は、異なる文字コード間での相互変換を行うための標準API、またはそのAPIに付随する文字コード変換ユーティリティプログラムです。名称は「International Codeset Conversion Library」に由来します。特にGNUによる実装が広く知られており、変換ライブラリである`libiconv`はLGPLライセンス、変換プログラム`iconv`はGPLライセンスで提供されています。

iconv API



iconv APIは、主にUNIX環境において文字列の文字コード変換を行うための標準インターフェースとして機能します。もともとHP-UXで開発されたものが、後にPOSIX規格として標準化されたため、多くのUnix系システムで利用可能です。このAPIは、単なる文字コード変換プログラムとしてだけでなく、既存のプログラムを国際化したり多言語化したりするためにも活用されます。例えば、Sambaの国際化対応にもiconvが使用されています。

互換性



XML処理ライブラリである`libxml`がiconvを必要とするため、`libxml`を使用するアプリケーションソフトウェアを利用する際にも、iconvのインストールが求められます。Microsoft Windows環境では、CygwinやGnuWin32といったUnixライクな環境を導入することで、iconv APIやiconvプログラムが利用可能になります。また、多くのプログラミング言語の標準ライブラリにAPIが組み込まれていることもあります。

プログラミング言語におけるiconvの利用



  • - PHP: PHPスクリプトからiconvの機能を直接利用できます。Windows版PHPでも、付属のDLL(`iconv.dll`)を通じて利用可能です。
  • - Ruby: バージョン1.9以前のRubyではiconvが推奨されていましたが、それ以降のバージョンではプラットフォーム依存性の問題から非推奨となり、`String#encode`が代替手段として推奨されています。

日本語の対応状況



GNU Cライブラリのiconvは、日本語の様々な文字コードに対応しています。具体的には、EUC-JP、EUC-JIS X0213、Shift_JIS、Shift_JIS X0213、CP932、ISO-2022-JPISO-2022-JP-2、ISO-2022-JP-1、ISO-2022-JP-MS、ISO-2022-JP-3などが含まれます。また、Unicodeのエンコーディング形式であるUTF-8UTF-16UTF-32UTF-7もサポートされています。

注意点



古くから使われている`nkf`と比較して、iconvは多くの環境で標準的に利用できる点がメリットです。ただし、一部の文字において`nkf`と変換結果が異なる場合があるため、注意が必要です。また、`nkf`に存在するエンコードの自動検出機能は、iconvには搭載されていません。

使用例



多くの非英語環境向けのUNIXプログラムでは、内部でiconvが間接的に使用されていますが、ユーザーが明示的に利用することも可能です。

シェルからの利用例


Shift_JIS形式のテキストファイル`sjis.txt`をUTF-8形式に変換し、`utf8.txt`として保存する例を以下に示します。

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


プログラムからの利用例


C言語で`libiconv`を利用して文字コード変換を行う例を以下に示します。簡略化のためエラー処理は省略しています。実用プログラムでは、適切にエラー処理を行う必要があります。

c

include


include


include


include



int main() {
iconv_t cd;
char inbuf = "文字列";
size_t inbytesleft = strlen(inbuf);
char outbuf[1024];
char
outptr = outbuf;
size_t outbytesleft = sizeof(outbuf);
size_t result;

cd = iconv_open("UTF-8", "Shift_JIS");
if (cd == (iconv_t)-1) {
perror("iconv_open");
return 1;
}

result = iconv(cd, &inbuf, &inbytesleft, &outptr, &outbytesleft);
if (result == (size_t)-1) {
perror("iconv");
iconv_close(cd);
return 1;
}
*outptr = '\0';

printf("%s
", outbuf);

iconv_close(cd);
return 0;
}


まとめ



iconvは、異なる文字コード間の変換を容易にするための重要なツールであり、多くのシステムやアプリケーションで必要とされています。特に多言語対応や国際化が求められる現代において、その重要性はますます高まっています。利用の際は、`nkf`との差異や、エンコード自動検出機能がない点に注意が必要です。

外部リンク



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。