iconvコマンドを使用すると、文字コードの変換を行うことができます。
現代の多くのLinux(AlmaLinux、Rocky Linux、Ubuntuなど)では、標準(POSIX準拠)で最初からインストールされているため、
追加のインストールなしですぐに利用できるのが大きなメリットです。
以下に、iconvコマンドを使用した各種日本語文字コードの変換実行例を記します。
■ 目次
iconvは、入力文字コード(From)と出力文字コード(To)を明示的に指定して変換します。
基本の構文は以下の通りです。
iconv -f 入力文字コード -t 出力文字コード 入力ファイル名 > 出力ファイル名
主要な文字コードの指定文字列は以下の通りです。
| 文字コード | 指定方法 |
| UTF-8 | UTF-8 |
| Shift_JIS | SHIFT_JIS (または CP932 ※推奨) |
| EUC-JP | EUC-JP |
Windowsで作成されたShift_JIS(機種依存文字を含むもの)を変換する場合、-f SHIFT_JIS よりも -f CP932 を指定した方が、文字化けやエラーを防ぎやすいため推奨されます。
以下のようなUTF-8で作成したテキストファイル(aiueo-utf8.txt)を元に、各種文字コードへ変換してみます。
以下のコマンドにより、UTF-8からShift_JISに変更されます。
$ iconv -f UTF-8 -t CP932 aiueo-utf8.txt > aiueo-sjis.txt
先ほど作成した aiueo-sjis.txt を、元のUTF-8に戻してみます。
$ iconv -f CP932 -t UTF-8 aiueo-sjis.txt > aiueo-utf8-2.txt
UTF-8からEUC-JPに変換する場合は以下のように指定します。
$ iconv -f UTF-8 -t EUC-JP aiueo-utf8.txt > aiueo-euc.txt
iconvはデフォルトでは、ファイル内に変換できない不正な文字が含まれていると、途中で処理を中断してしまいます。
変換できない文字を無視して(スキップして)最後まで変換したい場合は、-c オプションを付与します。
$ iconv -c -f CP932 -t UTF-8 input.txt > output.txt
iconvには nkf のような --overwrite(上書き)オプションがありません。
元のファイルを直接書き換えたい場合は、以下のように一時ファイル(tmp)を経由して上書きします。
$ iconv -f CP932 -t UTF-8 input.txt > input.txt.tmp && mv input.txt.tmp input.txt
拡張子が .txt のファイルをすべて一括でUTF-8に変換したい場合は、for ループを組み合わせると便利です。
for f in *.txt; do
iconv -f CP932 -t UTF-8 "$f" > "$f.tmp" && mv "$f.tmp" "$f"
done
本記事では、現代のLinux環境において標準の文字コード変換ツールである iconv コマンドについて解説しました。
nkf のような「自動文字コード判定機能」はありませんが、OSの初期状態で確実に動作し、かつ動作が非常に高速であるため、
現代のシステム開発や運用保守においては必須のコマンドとなっています。
状況に応じて nkf と上手に使い分けてみてください。