nkf(Network Kanji Filter)コマンドを使用してファイル内の日本語文字コードを調べる方法を記します。
現代のLinux(AlmaLinux、Rocky Linux、Ubuntuなど)では初期インストールされていない場合があるため、
必要に応じて dnf install nkf や apt install nkf などでインストールしてください。
kccコマンドを使用して文字コードを調べる資料も公開しています。
【現代のLinux環境における注意点】
現代のLinuxでは標準コマンドの file コマンド(file -i ファイル名)でも文字コード(charset)を確認できますが、
日本語(特にShift_JISやEUC-JP)の自動判定に関しては、現在でも nkf -g の方が圧倒的に高精度で判別してくれます。
■ 目次
nkfの-gオプションを使用することにより、日本語文字コードを判別することができます。
(自動判定ですが、誤判別する可能性があるので注意してください。詳細は man nkf で確認してみてください。)
nkfのオプション-gをmanコマンドで調べると以下のように記述されています。
$ man nkf <snip> -g 自動判別の結果を出力します。 <snip>
このオプションを使用することにより自動判別することができます。
以下に各種日本語文字コードのファイルを準備し、以下の構文でファイル内の文字コードを自動判定した時の実行例です。
nkf -g ファイル名
$ nkf -g aiueo-euc.txt EUC-JP
$ nkf -g aiueo-sjis.txt Shift_JIS
$ nkf -g aiueo-jis.txt ISO-2022-JP
$ nkf -g aiueo-utf8.txt UTF-8
ワイルドカード(`*`)を使用することで、カレントディレクトリ内にある複数のファイルをまとめて判定し、結果を一覧表示することも可能です。
$ nkf -g *.txt aiueo-euc.txt: EUC-JP aiueo-jis.txt: ISO-2022-JP aiueo-sjis.txt: Shift_JIS aiueo-utf8.txt: UTF-8
本記事では nkf コマンドを使った文字コードの判定方法について解説しました。
Linuxの標準コマンドである file コマンドよりも、日本のレガシーな文字コード(SJISやEUC-JP)を正確に見分ける能力が高いため、
出所不明のテキストファイルやCSVファイルの中身を調査する際には、今でもエンジニアにとって大変重宝するコマンドです。