文字コードを変換するコマンドは、nkfがよく使われていましたが、最近ではiconvもよく使われているようです。nkfは追加でインストールが必要ですが、iconvはUNIXライクなOSに、ほぼ標準でインストールされています。
iconvとnkfの違いは、nkfでは改行コードを変換することが可能ですが、iconvは改行コードの変換には対応していません。改行コードの変換が必要な場合、他のツールを併用して改行コードを変換する必要があります。
iconvの書式
<書式>
iconv [オプション] 入力ファイル
<オプション>
-f | 変換元の文字コードを指定。 |
-t | 変換したい文字コードを指定。 |
-o | 出力先のファイル名を指定。 |
-c | 変換できなかった文字を出力しない。 |
-s | 変換できなかった場合にエラーメッセージを表示しない。 |
-l | 利用可能な文字コードを表示する。 |
- 入力ファイルを指定しなかった場合は標準入力から入力します。
- 出力先(-o)を指定しなかった場合は標準出力へ出力します。
<指定できる主な文字コード>
UTF-8, UTF-16, UTF-32, SJIS, SHIFT-JIS, EUCJP,EUC-JP, ISO-2022JP, ISO-2022-JP, CP932
iconvの使い方
◇ iconvで使用できる文字コードの種類を確認する
$ iconv -l
◇Shift-jisをUTF-8に変換する場合
<サンプル>
例1. 変換して画面に表示する
$ iconv -f SJIS -t UTF-8 sample.txt
例2. 変換できない文字を無視して処理を続行する。
$ iconv -c -f SJIS -t UTF-8 sample.txt
例3. 変換してファイルに保存する(リダイレクション)
$ iconv -f SJIS -t UTF-8 sample.txt > utf8.txt
例4. 変換してファイルに保存する(-o で指定する)
$ iconv -f SJIS -t UTF-8 sample.txt -o utf8.txt
例5. 標準入力から受け取って変換する(リダイレクション)
$ iconv -f SJIS -t UTF-8 < sample.txt
例6. 標準入力から受け取って変換する(パイプ)
$ cat sample.txt | iconv -f SJIS -t UTF-8
実は、sample.txtを例のように変換すると、例2 以外は以下のエラーメッセージを表示して終了します。
[CentOS] 〇付数字:iconv: 位置 142 に不正な入力シーケンスがあります [FreeBSD] 〇付数字: iconv: sample.txt:9:10: cannot convert
これは、変換元の文字コードの指定に「SJIS,SHIFT-JIS」を指定しているためです。「SJIS,SHIFT-JIS」は丸付数字などの機種依存文字に対応していません。
<-c を指定して変換できない文字を無視して出力>
MicrosoftのWindows OSで使用されている機種依存文字を含むシフトJISコードのテキストは「CP932」を指定する必要があります。
$ iconv -f CP932 -t UTF-8 sample.txt
<「CP932」を指定した時の出力>
コメント