Linux/UNIXで、指定したファイルの文字コード(UTF-8とか、EUC-JPとか)を調べる場合は、以下のような方法がある。

1.fileコマンドで調べる

UTF-8か、EUC-JPなのか、それともShift_JISなのか…
日本語のファイルだとはわかっていて、その違いを調べるだけであれば、fileコマンドで事足りる。

以下のように、「-i」オプションを付与してfileコマンドを実行することで、文字コードを調べることができる(Shift_JISのみ、「unknown-8bit」として出力される)。

bash
file -i ファイルPATH
shell
blacknon@BS-PUB-UBUNTU-01:~$ file -i /tmp/ascii.txt /tmp/ascii.txt: text/plain; charset=us-ascii blacknon@BS-PUB-UBUNTU-01:~$ file -i /tmp/euc-jp.txt /tmp/euc-jp.txt: text/plain; charset=iso-8859-1 blacknon@BS-PUB-UBUNTU-01:~$ file -i /tmp/shift_jis.txt /tmp/shift_jis.txt: text/plain; charset=unknown-8bit blacknon@BS-PUB-UBUNTU-01:~$ file -i /tmp/utf-8.txt /tmp/utf-8.txt: text/plain; charset=utf-8

2.nkfコマンドで調べる

nkfコマンドを用いることでも、ファイルのエンコード方式を求めることができる。
具体的には、「--guess」オプションを付与することでそれを行うことができる。

bash
nkf --guess ファイルPATH
shell
blacknon@BS-PUB-UBUNTU-01:~$ nkf --guess /tmp/ascii.txt ASCII (LF) blacknon@BS-PUB-UBUNTU-01:~$ nkf --guess /tmp/euc-jp.txt EUC-JP (LF) blacknon@BS-PUB-UBUNTU-01:~$ nkf --guess /tmp/shift_jis.txt Shift_JIS (LF) blacknon@BS-PUB-UBUNTU-01:~$ nkf --guess /tmp/utf-8.txt UTF-8 (LF)

3.uchardetコマンドで調べる

日本語だけではなく、中国語やロシア語といった外国語のファイルも含まれている状態の場合は、この「uchardet」コマンドを使うといいだろう。
Debian/Ubuntuでは、以下のコマンドでインストールできる。

bash
sudo apt-get install uchardet libuchardet-dev

インストール後は、以下のようにコマンドを実行する。

bash
uchardet ファイルPATH
shell
blacknon@BS-PUB-UBUNTU-01:~$ uchardet uchardet/test/ja/euc-jp.txt EUC-JP blacknon@BS-PUB-UBUNTU-01:~$ uchardet uchardet/test/ja/shift_jis.txt Shift_JIS blacknon@BS-PUB-UBUNTU-01:~$ uchardet uchardet/test/ja/utf-8.txt UTF-8 blacknon@BS-PUB-UBUNTU-01:~$ uchardet uchardet/test/da/iso-8859-1.txt windows-1252 blacknon@BS-PUB-UBUNTU-01:~$ uchardet uchardet/test/ru/ibm855.txt IBM855 blacknon@BS-PUB-UBUNTU-01:~$ uchardet uchardet/test/fr/iso-8859-1.txt windows-1252

4.file2コマンドを用いる

「file-kanji」パッケージに含まれているfile2コマンドもあり、これを使うことでエンコードの確認が行える。
Ubuntuの場合、以下のコマンドでインストールが可能だ。

bash
sudo apt-get install file-kanji

実際使う際は、以下のようにコマンドを実行する。

bash
file2 ファイルPATH
shell
blacknon@BS-PUB-UBUNTU-01:~$ file2 /tmp/ascii.txt /tmp/ascii.txt: ascii text blacknon@BS-PUB-UBUNTU-01:~$ file2 /tmp/euc-jp.txt /tmp/euc-jp.txt: EUC text blacknon@BS-PUB-UBUNTU-01:~$ file2 /tmp/shift_jis.txt /tmp/shift_jis.txt: SJIS text blacknon@BS-PUB-UBUNTU-01:~$ file2 /tmp/utf-8.txt /tmp/utf-8.txt: UTF-8 text