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」とすると、文字コードの一覧が表示される。ただし、同じ文字コードに対して別名が定義されている場合があるので注意が必要である。また、大量の文字コード名が出力されるので*2、grepなどと組み合わせて使用するのがよい。
#使用可能な全ての文字コードを出力する 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