UNIX/LinuxとWindowsマシンを使い分けている人にとってやっかいなことの1つは、マシン間での文字コードの変換でしょう。WindowsはShift-JIS、それに対してUNIX/LinuxはUTF-8であったりEUC-JPであったりと文字コードがWindowsと違っていることが多いですよね。となると、UNIX/Linux側でファイルサーバ(Samba)を起動し、ファイル共有を行っていたとしても、文字コードが違っているためにうまく使えないこともあると思います。そんなときに、UNIX/Linuxマシンには文字コードを変換するコマンドnkfが存在します。今回は、そんなnkfコマンドについて解説します。
文字コード変換といえばnkf
基本的な構文は、
$ nkf オプション ファイル名 [ > 出力ファイル名]
となっています。また、オプションは、
- -j(省略可):JISコード(ISO-2022-JP)を出力
- -e:EUCコードを出力
- -s:Shift-JISコードを出力
- -w:UTF-8コードを出力(BOM無し)
- -Lu:UNIX改行形式(LF)に変換
- -Lw:Windows改行形式(CRLF)に変換
- -Lm:Macintosh改行形式(CR)に変換
- -g(–guess):自動判別の結果を表示
- –overwrite:引数のファイルに直接上書き
- –version:バージョン情報を表示(インストール済みかのチェックなど)
となっています。変換先文字コードの頭文字1文字(UTF-8の場合例外的にw)ですね。また、環境によって変わってくる改行形式(CR, LF, CR+LF)についても、L~というオプションによって変換できます。LはLine break(改行)の略でしょうか。また、現在のファイルの文字コードを知りたい場合は、-gオプションを使えばOKです。
このままnkf -w ファイル名などとしただけでは、ファイルの文字コードは変換されずに、指定した文字コードに変換したファイルの中身がそのままターミナル上に出力されるだけになります。文字コードを変換したファイルを作成するには、 > 出力ファイル名などとして、出力先をファイルにしましょう。この指定方法では、同じファイル名を指定すると、ファイルのデータが消失してしまうので注意しましょう。この方法で行う場合は、文字コードを変換するファイル名と出力先ファイル名は別のファイル名を指定しましょう。しかし、文字コードをnkfコマンドで変換してその後、mvコマンドでファイル名を変換し、上書きするのは面倒です。そんな場合は、nkfコマンドに–overwriteオプションを付加しましょう。overwriteオプションを付加することによって、入力となるファイルの文字コードを指定した文字コードに変換した結果で入力ファイルを上書きしてくれます。
コマンド例文
$ nkf -g example.txt # 文字コードをチェック
$ nkf -e example.txt # EUCに変換した結果を標準出力
$ nkf -e example.txt > conv.txt # EUCに変換した結果をconv.txtに出力
$ nkf -e --overwrite example.txt # 文字コードをEUCに変換し、上書き
$ nkf -w Lu --overwrite example.txt # 文字コードをUTF-8、改行コードをUNIX/Linixに変換し、上書き
$ nkf -s --overwrite *.html # ディレクトリ内すべての~.htmlファイルをShift-JISに変換し上書き
関連記事