はじめに

こんにちは!今回はiconvコマンドについて解説します。

iconvは、ファイルの文字コードを別の文字コードに変換するコマンドです。「このファイル、Shift-JISなのに UTF-8 で処理したい」「文字化けが発生している」という時に活躍。

古いシステムとの連携、国際化対応、文字化け問題の解決など、多言語環境では必須のコマンドですよ。

iconvコマンドとは

iconvは、ファイルの文字コード(エンコーディング)を別の文字コードに変換する外部コマンドです。“iconv” = “input/output conversion"の略ですね。

Shift-JIS、EUC-JP、UTF-8など、異なるエンコーディング間での変換を効率的に実行できます。スクリプト処理やシステム統合で活躍します。

基本構文

1
iconv [オプション] [ファイル]

ファイル名を指定しないと標準入力から読み込みます。

主なオプション

オプション 説明
-f 入力の文字コード指定
-t 出力の文字コード指定
-l サポートする文字コード一覧
-o 出力ファイル指定
-c 変換不可文字を削除

使用例

例1: UTF-8 から Shift-JIS に変換

1
echo "こんにちは" | iconv -f UTF-8 -t SHIFT-JIS

実行結果:

1
(Shift-JIS形式で出力)

UTF-8で書かれた日本語をShift-JISに変換。

例2: Shift-JIS から UTF-8 に変換

1
iconv -f SHIFT-JIS -t UTF-8 input.txt

実行結果:

1
(UTF-8形式で出力)

古いファイルを現代的なUTF-8に変換。

例3: 出力ファイルに保存

1
iconv -f SHIFT-JIS -t UTF-8 -o output.txt input.txt

実行結果:

1
(output.txt が UTF-8 で作成される)

変換結果をファイルに保存。

例4: サポートする文字コード一覧

1
iconv -l

実行結果:

1
2
3
4
5
6
7
ANSI_X3.4-1968 ANSI_X3.4-1986 ASCII ASMO-708
BIG5 BIG5-HKSCS CP1250 CP1251 CP1252 CP1253
EUC-JP EUC-KR EUC-TW GB18030 GB2312 GBK
ISO-8859-1 ISO-8859-2 ISO-8859-3 ISO-8859-4
SHIFT-JIS SHIFT_JIS SJIS SJIS2004
UTF-8 UTF-16 UTF-32
...

システムでサポートされているすべての文字コード。

例5: 複数ファイルを一括変換

1
2
3
for file in *.txt; do
  iconv -f SHIFT-JIS -t UTF-8 "$file" -o "${file%.txt}_utf8.txt"
done

実行結果:

1
(すべてのtxtファイルがUTF-8に変換される)

バッチ処理で複数ファイル変換。

例6: パイプで他のコマンドと組み合わせ

1
cat sjis_file.txt | iconv -f SHIFT-JIS -t UTF-8 | grep "pattern"

実行結果:

1
(UTF-8に変換後に検索)

変換後にgrep処理。

例7: EUC-JP から UTF-8 に変換

1
iconv -f EUC-JP -t UTF-8 old_file.txt

実行結果:

1
(EUC-JPファイルがUTF-8に変換)

古い EUC-JP 形式を現代的に変換。

例8: 変換不可文字を削除

1
iconv -f UTF-8 -t ASCII//IGNORE input.txt

実行結果:

1
(ASCIIで表現不可な文字が削除される)

互換性のない文字を自動削除。

例9: 文字化けファイルの修正

1
2
# 元のファイルが UTF-8 なのに Shift-JIS として開かれている場合
iconv -f SHIFT-JIS -t UTF-8 garbled.txt -o fixed.txt

実行結果:

1
(文字化けが修正される)

文字コード誤認識を修正。

例10: ログファイルの文字コード統一

1
2
3
for logfile in /var/log/*.log; do
  iconv -f SHIFT-JIS -t UTF-8 "$logfile" -o "$logfile.utf8" 2>/dev/null
done

実行結果:

1
(すべてのログがUTF-8で統一)

ログの文字コードを統一。

Tips・注意点

文字コード名の大文字小文字

1
2
3
4
# これらはすべて同じ
iconv -t UTF-8
iconv -t utf-8
iconv -t utf8

通常は大文字小文字が区別されません。

//IGNORE と //TRANSLIT オプション

1
2
3
4
5
# //IGNORE: 変換不可文字を削除
iconv -f UTF-8 -t ASCII//IGNORE file.txt

# //TRANSLIT: 類似文字に置き換え
iconv -f UTF-8 -t ASCII//TRANSLIT file.txt

変換不可文字の処理方法を指定。

ファイルの文字コード確認

1
2
3
4
# ファイルの文字コードを確認
file -i filename.txt

# 変換の前に確認することが重要

変換前に必ず確認。

BOM(バイトオーダーマーク)の処理

1
2
# UTF-8 with BOM から UTF-8 に変換
iconv -f UTF-8 -t UTF-8 < input.txt > output.txt

BOM付きファイルの処理。

実践的な使い方

Windows ファイルを Linux で処理

1
2
# Windows(Shift-JIS)ファイルをLinux(UTF-8)に変換
iconv -f SHIFT-JIS -t UTF-8 windows_file.txt | sed 's/\r$//' > linux_file.txt

Windows と Linux 間のファイル交換時に使用。

CSVファイルの文字コード統一

1
2
3
4
# 複数のCSVを UTF-8 に統一
for csv in *.csv; do
  iconv -f SHIFT-JIS -t UTF-8 "$csv" > "${csv%.csv}_utf8.csv"
done

データベースインポート前に文字コード統一。

データベースダンプの変換

1
2
# MySQL のダンプを変換
mysqldump -u user -p database | iconv -f UTF-8 -t SHIFT-JIS > backup.sql

異なる文字コード環境との連携。

スクリプト内での文字コード対応

1
2
3
4
5
6
#!/bin/bash
# 入力ファイルが SHIFT-JIS の場合、UTF-8 に変換して処理
input_file="$1"
iconv -f SHIFT-JIS -t UTF-8 "$input_file" | while read line; do
  echo "$line" | grep "pattern"
done

汎用スクリプトで複数文字コード対応。

まとめ

iconvコマンドのポイント:

  • ファイルの文字コードを別の文字コードに変換
  • -f: 入力の文字コード指定
  • -t: 出力の文字コード指定
  • -o: 出力ファイル指定
  • -l: サポート文字コード一覧表示
  • -c: 変換不可文字を削除
  • //IGNORE, //TRANSLIT で柔軟に対応
  • よく使う組み合わせ: iconv -f SHIFT-JIS -t UTF-8 file.txt

文字化けのトラブル、古いシステムとの連携、国際化対応など、iconvは多くの場面で活躍する重要なコマンド。文字コード問題に直面したときは、iconvで素早く解決できますよ!