文字コードの変換

Linux環境では、ファイル内容の文字コード変換にnkf、ファイル名の文字コード変換にconvmvを使う。nkfは入力文字コードを自動判別し、多様なエンコーディングに変換する。convmvは既定で変換内容を表示するだけであり、実際にファイル名を変更するには--notestオプションが必要である。

文字コードの変換は、異なる環境間でファイルをやり取りするときに必要になる。Ubuntu 24.04 LTS では、nkf と convmv がパッケージとして提供されている。次のコマンドでインストールする。

sudo apt -y install nkf convmv

nkf を使う場合

ファイルの内容の文字コードを変換するには、nkf コマンドを使う。nkf は入力の文字コードを自動判別する機能を持ち、入力文字コードを指定しなくても変換できることが多い。出力する文字コードはオプションで指定する。ISO-2022-JP、Shift_JIS、EUC-JP、UTF-8 のほか、UTF-16 や UTF-32 にも対応している。

変換前に文字コードを確認するには、nkf --guess ファイル名 を実行する。判別結果の文字コードと改行コードが表示される。

nkf は変換結果を標準出力に出力する。nkf -w ファイル名 のようにリダイレクトを使わずに実行すれば、変換結果を画面で確認できる。

convmv を使う場合

ファイル名の文字コードを変換するには、convmv コマンドを使う。convmv が変換するのはファイル名であり、ファイルの内容は変換しない。convmv は既定では変換の内容を表示するだけである。実際にファイル名を変更するには --notest オプションを指定する。まず --notest を付けずに実行して結果を確認し、問題がなければ --notest を付けて実行する。

変換元の文字コードは -f、変換先の文字コードは -t で指定する。ディレクトリ内のファイル名をまとめて変換するには、-r(再帰的に処理)を指定する。利用できる文字コードの一覧は convmv --list で表示される。

UTF-8 への変換では、convmv はすでに UTF-8 になっているファイル名を判別し、そのファイルを処理の対象から外す。この判別を行わせずに変換するには --nosmart を指定するが、二重に UTF-8 に変換されたファイル名になることがある。