nkfコマンド・iconvコマンドで覚えておきたい文字コード・改行コード変換方法いろいろ

Linuxで日本語を含むファイルやWindowsで作成したファイルを利用する際にネックになる、文字コードや改行コード。
今回は、それらの変換で良く利用されるコマンド、nkfコマンドとiconvコマンドで覚えておくと便利な使い方についてをまとめてみる事にする。

個人的な感想としては、nkfコマンドの方が多機能なのだが、iconvコマンドの方が新しくとっつきやすい、デフォルトで用意されている事が多い印象がある。

1.文字コードの変換を行う

まずは基本の機能。文字コードを変換する場合は、以下のようにコマンドを実行する。

1-1.nfkの場合

nkfコマンドの場合は、以下のオプションを駆使して文字コード変換を行う。

内容 指定文字列
ファイルの文字コードを指定する J(JIS), E(EUC-JP), S(SJIS), W(UTF-8)
変換後の文字コードを指定する j(JIS), e(EUC-JP), s(SJIS), w(UTF-8)

例えば、EUC-JPのファイルをUTF-8に変換する場合は、以下のようにコマンドを実行すれば良い。

nkf -Ew 対象ファイル

[root@test-centos7 ~]# file /work/nkftest1.txt
/work/nkftest1.txt: ISO-8859 text
[root@test-centos7 ~]# cat /work/nkftest1.txt
、「、「、「、「、「、「

[root@test-centos7 ~]# nkf -Ew /work/nkftest1.txt
ああああああ

1-2.iconvの場合

iconvの場合は、以下のようにコマンドを実行することで文字コード変換を行う事が出来る。

iconv -f ファイルの文字コード -t 変換させる文字コード 対象ファイル

[root@test-centos7 ~]# file /work/nkftest1.txt
/work/nkftest1.txt: ISO-8859 text
[root@test-centos7 ~]#
[root@test-centos7 ~]# iconv -f eucjp -t utf-8 /work/nkftest1.txt
ああああああ

2.改行コードの変換を行う

nkfコマンドで改行コードを変換する場合は、以下のオプションを使用して変換を行う。

オプション 内容
------------ -----------------------------
-Lu unix改行形式(LF)に変換
-Lw windows改行形式(CRLF)に変換
-Lm macintosh改行形式(CR)に変換

なお、改行コードの変換はnkfでは可能だが、iconvでは対応していない。
nkfが入っていない場合は、別途「dos2unix」「unix2dos」コマンドで対応すると良いだろう。

3.ファイルの文字コードを確認する

ファイルの文字コードを確認する場合も、nkfコマンドで「-g」オプションを使用することで実施可能だ。
なお、nkfコマンドがない場合は「file」コマンドを使用することで文字コードを確認することが出来る。

nkf -g 対象ファイル

[root@test-centos7 ~]# nkf -g /work/nkftest1.txt
EUC-JP
[root@test-centos7 ~]# nkf -g /work/nkftest2.txt
Shift_JIS
[root@test-centos7 ~]#
[root@test-centos7 ~]# file /work/nkftest1.txt
/work/nkftest1.txt: ISO-8859 text
[root@test-centos7 ~]# file /work/nkftest2.txt
/work/nkftest2.txt: Non-ISO extended-ASCII text

4.文字コード・改行コードを変換して上書き保存する

文字コード・改行コードを変換した状態で上書き保存する場合は、nkfコマンドで「--overwrite」オプションを付与すると良いだろう。

nkf -変換オプション --overwrite 対象ファイル

[root@test-centos7 ~]# nkf -g /work/nkftest1.txt
EUC-JP
[root@test-centos7 ~]# nkf -s --overwrite /work/nkftest1.txt
[root@test-centos7 ~]# nkf -g /work/nkftest1.txt
Shift_JIS

以上、タイトルだとnkfとiconvと記述したが、ほとんどnkfコマンドだけだった。
最近だとnkf入ってない事も多いので、まぁ環境に合わせて使い分けて貰えれば…