Linux/UNIXで、指定したファイルの文字コード(UTF-8とか、EUC-JPとか)を調べる場合は、以下のような方法がある。
1.fileコマンドで調べる
UTF-8か、EUC-JPなのか、それともShift_JISなのか…
日本語のファイルだとはわかっていて、その違いを調べるだけであれば、fileコマンドで事足りる。
以下のように、「-i」オプションを付与してfileコマンドを実行することで、文字コードを調べることができる(Shift_JISのみ、「unknown-8bit」として出力される)。
file -i ファイルPATH
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」オプションを付与することでそれを行うことができる。
nkf --guess ファイルPATH
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では、以下のコマンドでインストールできる。
sudo apt-get install uchardet libuchardet-dev
インストール後は、以下のようにコマンドを実行する。
uchardet ファイルPATH
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の場合、以下のコマンドでインストールが可能だ。
sudo apt-get install file-kanji
実際使う際は、以下のようにコマンドを実行する。
file2 ファイルPATH
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