iconvコマンドの使い方

Unix/Linux文字コード変換に使用される、iconvコマンドの使い方についてのメモ書きです。*1

iconvコマンドの基本的な使い方

オプションの指定方法

  • 入力データの文字コード
    • 「-f (--from-code)」で指定する。
  • 出力データの文字コード
    • 「-t (--to-code)」で指定する。
    • 省略すると、ロケールから自動的に決定される。
  • 入力データ
    • 標準入力から読み込む。(リダイレクト or パイプ)
    • コマンドの引数として指定してもよい。
  • 出力データ
    • 標準出力に書き込む。(リダイレクト or パイプ)
    • 「-o (--output)」で指定してもよい。
#標準入出力を使う例
iconv -f SJIS -t UTF8 < sjis.txt > utf8.txt

#標準入出力を使わない例
iconv -f SJIS -t UTF8 sjis.txt -o utf8.txt

複数ファイルの変換

iconvコマンドには、複数のファイルを一括で変換する機能はない。このため、for文などを利用する。

#カレントディレクトリから拡張子が「.txt」のファイルを検索し、SJISからUTF8に変換する。
#出力ファイル名は、入力ファイル名の頭に「utf8-」を付ける。
#このサンプルはsh/bashを前提としている。

#複数ファイルを変換する例
for f in `ls *.txt`
do
    iconv -f SJIS -t UTF8 < $f > utf8-$f
done

#複数ファイルを変換する例 (1行で書きたい場合)
for f in `ls *.txt`; do iconv -f SJIS -t UTF8 < $f > utf8-$f; done

使用できる文字コード

「iconv -l」とすると、文字コードの一覧が表示される。ただし、同じ文字コードに対して別名が定義されている場合があるので注意が必要である。また、大量の文字コード名が出力されるので*2grepなどと組み合わせて使用するのがよい。

#使用可能な全ての文字コードを出力する
iconv -l

#日本語に関連しそうな文字コードを出力する
iconv -l | grep 'JIS\|JP\|932\|UTF\|UNICODE\|KANA\|KANJI'

日本語に関連する文字コード

日本語に関連しそうな文字コードから、比較的よく使いそうなものを抜粋した。

分類 文字コード
SHIFT-JIS SHIFT-JIS
SHIFT_JIS
SJIS
SJIS-WIN
CP932
MS932
EUC-JP EUC-JP
EUCJP
EUC-JP-MS
EUCJP-MS
EUCJP-WIN
UJIS
JIS ISO-2022-JP
ISO2022JP
UTF-8 UTF-8
UTF8
UTF-16 UTF-16
UTF16
UTF-16BE
UTF16BE
UTF-16LE
UTF16LE

その他

iconvコマンドでは、入力ファイルと出力ファイルに同じファイルを指定することはできない。そのため、入力ファイル名と出力ファイル名を同じにしたい場合は、一時ファイルを使用する。

#正しく動作しない例
iconv -f SJIS -t UTF8 < foo.txt > foo.txt

#一時ファイルを使用する例
iconv -f SJIS -t UTF8 < foo.txt > tmp.txt
mv tmp.txt foo.txt

*1:Ubuntu 8.04(/bin/bash)で確認しました。

*2:私の確認した環境では1153種類でした。