iconvコマンドで文字コードを変換する

文字コードを変換するコマンドは、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」を指定した時の出力>

コメント

タイトルとURLをコピーしました