極力何も入れずに文字コードをコマンドラインで判別したい

1 min read読了の目安(約700字

TL;DR

encguess hoge.pl

解説

普段文字コードの変換などは nkf を愛用していますが、文字コードの判別などでたまに困るときがあります。

nkfを使って文字コードを判別する際は nkf --guess hoge と入力するのが一般的だと思います。

ですが、この方法では、例えば絵文字が入った次の様なUTF8なファイルを与えると厳しい挙動をします。

sub term:<😎> { 1 }
sub prefix:<😁> { log $^n }
sub O { $^v }


say O(😎);
say O(😁 42);

(ちなみにこのコードはRaku(Perl6)で動くので試してみてください)

これを emoji.p6などのファイル名にしてnkfで与えると

$ nkf --guess emoji.p6
BINARY

いやまぁバイナリっぽいけれど....

こういう時は PerlのEncodeに付随している encguessが便利です。
実際にencguessでやってみましょう。

$ encguess hoge.pl
hoge.pl	UTF-8

いい感じにUTF8と判別されました!!! めでたい!!!!

encguessはPerlが入っていればだいたい入っています。しかもPerlはgitがあればだいたい入っているので、linuxサーバーを建ててわざわざnkfをいれるのに抵抗がある方も、ぜひencguessを使って文字コードを判別しましょう!!!!!!