文字コード、改行コードの確認と変換(nkf, 一括変換)

Linuxを利用している中で、日本語が文字化けしたときの対処方法を紹介します。「ファイルの文字コードを確認、変換する方法」「環境変数LANGを確認、変更する方法」について取り上げます。

文字コード & 改行コードを確認

nkfコマンドで確認

nkf(Network Kanji Filter)コマンド で、ファイルの 文字コード を確認できます。

nkf -g ファイル名
$ nkf -g Vagrantfile 
UTF-8

改行コード も確認したい場合 --guessオプション を利用します。

$ nkf --guess test.txt
Shift_JIS (CRLF)

補足|OSごとの改行コード

OS 改行コード名 改行コード
Linux LF \n
Mac(OSX以降) LF \n
Mac(OS9まで) CR \r
Windows CR + LF \r\n

参考

文字コード & 改行コードを変換

nkfコマンドで変換

# UTF-8に変換して上書き保存
nkf -w --overwrite 対象ファイル名

# UTF-8(LF)に変換して上書き保存
nkf -wd --overwrite 対象ファイル名

# Shift-JISに変換して上書き保存
nkf -s --overwrite 対象ファイル名

# Shift-JIS(CRLF)に変換して上書き保存
nkf -sc --overwrite 対象ファイル名

さらに、一括変換などの実用的な利用例を示します。

# .txtをまとめてUTF-8(LF)に変換して上書き保存
nkf -wd --overwrite *.txt

# カレントディレクトリ配下の全txtファイルの文字コードを一括変換
find . -type f -name "*.txt" -exec nkf -wd --overwrite {} \;

# 別ファイルで保存
nkf -wd 対象ファイル名 > 新規ファイル名

iconvコマンドで変換

iconvコマンドでも、ファイルの文字コードを変換できます。

iconv -f 変換元の文字コード -t 変換後の文字コード 対象ファイル名
$ nkf -g Vagrantfile 
UTF-8
$ 
$ iconv -f UTF-8 -t SHIFT-JIS Vagrantfile > Vagrantfile_sjis
$ 
$ nkf -g Vagrantfile_sjis 
Shift_JIS

環境変数LANGの確認

下記コマンドで環境変数LANGを確認できます。

$ env | grep LANG
LANG=en_US.UTF-8

環境変数LANGの変更

envで変更

$ env LANG="文字コード" コマンド

実行するコマンドにのみ、環境変数を一時的に設定できます。

※文字コード

  • 日本語UTF-8であれば ja_JP.UTF-8 と設定します。
  • SJISであれば ja_JP.SJIS と設定します。

exportで変更

$ export LANG="文字コード"

ログイン中は変更されたままになります。ログオフすると元に戻ります。

デフォルト値を変更

ログオフしても元に戻らないようにするには、設定ファイル( /etc/sysconfig/i18n )を修正します。

$ vi /etc/sysconfig/i18n