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-JP、
ISO-2022-JP-2、
ISO-2022-JP-1、
ISO-2022-JP-MS、
ISO-2022-JP-3などが含まれます。また、
Unicodeのエンコーディング形式である
UTF-8、
UTF-16、
UTF-32、
UTF-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`との差異や、エンコード自動検出機能がない点に注意が必要です。
外部リンク