nkf で文字コードを -g で判別し、 -e/-s/-w で変換する2021年05月25日 13時23分21秒

とても久しぶりに日本語での文字コードの判別が必要になった。すっかり忘れてしまっていた nkf の引数。man を見ても、色々なオプションが多く、-g で判別できるのを再発見するのに手間取ってしまった。

まずは、変換方法。-e は EUC、-s は Shift-JIS。-w は wide として覚えた。

% nkf -e text.ja_JP > text.ja_JP.EUC-JP
% nkf -s text.ja_JP > text.ja_JP.SJIS
% nkf -w text.ja_JP > text.ja_JP.UTF-8
そして、-g で file の様に文字コードを判別できる。
% nkf -g text.txt text.ja_JP.*
text.txt: ASCII
text.ja_JP.EUC-JP: EUC-JP
text.ja_JP.SJIS: Shift_JIS
text.ja_JP.UTF-8: UTF-8

なお、man nkf を試してみたが、-g 個別の説明は無く、--guess=[12] のみがある。

--guess=[12]
    Print guessed encoding and newline. (2 is default, 1 is only
    encoding)
ただ、1 が何で、2 がなんだか書いていない。あと、2 がデフォルトと書いてはあるもの、行っているのは符号化の判定のみなのだが。
% nkf -g1 text.txt text.ja_JP.*
text.txt: ASCII
text.ja_JP.EUC-JP: EUC-JP
text.ja_JP.SJIS: Shift_JIS
text.ja_JP.UTF-8: UTF-8
% nkf -g2 text.txt text.ja_JP.*
text.txt: ASCII (LF)
text.ja_JP.EUC-JP: EUC-JP (LF)
text.ja_JP.SJIS: Shift_JIS (LF)
text.ja_JP.UTF-8: UTF-8 (LF)
% nkf -g0 text.txt text.ja_JP.*
text.txt: ASCII
text.ja_JP.EUC-JP: EUC-JP
text.ja_JP.SJIS: Shift_JIS
text.ja_JP.UTF-8: UTF-8