文字コードの変換
Linux環境でファイル内容の文字コード変換にはnkfを、ファイル名の変換にはconvmvを使用する。nkfは自動判別や多様なエンコーディングに対応する。convmvはファイル名変換に特化し、実行には--execオプションが必要である。
文字コードの変換は、異なる環境間でファイルをやり取りする際などに必要となる。Ubuntu 24.04 LTSにおいては、nkfやconvmvといったコマンドラインツールが標準パッケージとして利用可能であり、文字コード変換によく用いられる。
nkf を使う場合
ファイルの内容の文字コードを変換するには、nkf コマンドが便利である。nkfは統計的な文字コード自動判別機能を持ち、入力文字コードを指定しなくても適切に変換できることが多い。オプションで出力エンコーディングを指定する。UTF-8、Shift_JIS、EUC-JP、ISO-2022-JPだけでなく、UTF-16やUTF-32などの多様な文字コードに対応している。
ファイル変換前に文字コードを確認する場合は nkf --guess ファイル名
コマンドを使用でき、正確な判別が可能である。
コマンドで変換する前にテスト出力を確認したい場合は、リダイレクションを使わずに nkf -w ファイル名
を実行することで、変換結果が標準出力に表示される。
- nkf -w: 入力されたテキストを指定された文字コードから判定し、UTF-8に変換して標準出力に出力する。例えば、Shift_JISのファイルをUTF-8に変換するには、次のように実行する。
nkf -w sjis_file.txt > utf8_file.txt
- nkf -s: 入力されたテキストを判定し、Shift_JISに変換して標準出力に出力する。
nkf -s utf8_file.txt > sjis_file.txt
- nkf -j: 入力されたテキストを判定し、JISコードに変換して標準出力に出力する。
nkf -j file.txt > jis_file.txt
- nkf -e: 入力されたテキストを判定し、EUC-JPに変換して標準出力に出力する。
nkf -e file.txt > euc_file.txt
- nkf -x: 半角カナを全角カナに変換して標準出力に出力する。文字コード変換オプションと組み合わせて使用することも可能である。例えば、半角カナを含むShift_JISファイルを全角カナを含むUTF-8に変換するには次のように実行する。
nkf -w -x hankaku_file.txt > zenkaku_utf8_file.txt
- 複数ファイルをまとめて処理したい場合は、findとxargsを組み合わせると効率的である。例えば、カレントディレクトリ以下のすべての.txtファイルをUTF-8に変換して元ファイルを直接上書きするには、次のように実行する。
find . -type f -name "*.txt" | xargs nkf -w --overwrite
convmv を使う場合
一方、ファイル名の文字コードを変換するには、convmv コマンドを使用する。これはファイルシステム上でのファイル名のエンコーディングを書き換えるツールである。convmvは常にテストモードで動作するため、実際にファイル名を変換するには --exec オプションを明示的に指定する必要がある。
実行前に変換結果を確認し、問題がなければ--exec
オプションを付けて実行することが推奨される。
- convmv -t utf-8: ファイル名を指定された入力エンコーディングからUTF-8に変換する。入力エンコーディングは -f オプションで指定する必要がある。例えば、主にWindows環境で使われるCP932 (Shift_JIS相当) でエンコードされたファイル名をUTF-8に変換するには、次のように実行する。
実行する場合:convmv -f cp932 -t utf-8 ファイル名.txt
ディレクトリ内のファイル名をまとめて変換するには、-r (recursive) オプションを使用する。このオプションを使うと、指定したディレクトリ以下のすべてのファイル名を再帰的に変換できる。convmv -f cp932 -t utf-8 --exec ファイル名.txt
convmv -f cp932 -t utf-8 -r --exec ディレクトリ名/
- convmv -t cp932: ファイル名を指定された入力エンコーディングからCP932に変換する。入力エンコーディングを -f オプションで指定する必要がある。例えば、UTF-8でエンコードされたファイル名をCP932に変換するには、次のように実行する。
実行する場合:convmv -f utf-8 -t cp932 ファイル名.txt
convmv -f utf-8 -t cp932 --exec ファイル名.txt