Linuxで文字コードが変換できる便利なnkfコマンドについて書き留めます。
nkfコマンドの使い方
nkf [option] file
コマンドとファイル名を入力すれば文字コードの変換が行われます。
オプションをつけない場合は自動的にJISコードに変換されます。
nkfコマンドのオプション
-j : JISコードに変換する(デフォルト) -e : EUCコードに変換する -s : Shift-JISコードに変換する -w : UTF-8コードに変換する -g : 文字コードを表示する -v : nkfのバージョンを表示する --overwrite : 元のファイルを変換結果で置き換える
--oc = <output_codeset> : 出力の漢字コード系を指定する UTF-8 UTF-8N : BOM無しのUTF-8に変換する UTF-8-BOM : BOM付きのUTF-8に変換する -L : 改行コードを変換する -Lu : Unixの改行コード(LF)に変換する -Lw : Windowsの改行コード(CRLF)に変換する -Lm : Macの改行コード(CR)に変換する
オプションの–overwriteを利用することで、元ファイルに文字コードの変換を適用することが出来ます。
–overwriteを付けないと標準出力(ターミナル)に結果が出力されます。
nkfコマンドの実行
実際にnkfコマンドを試してみます。
忙しい方はサンプルコードまでスキップ
まずecu-jp, shift-jis, utf-8, utf-8-bomの4種類の文字コードで記述されたサンプルファイルを用意します。
fileコマンドで確認してみると無事それぞれの文字コードで記録されていることが確認できます。
nkfコマンドと-gオプションでも文字コードを確認してみるとfileコマンドとほぼ同じ結果が得られました。
試しにシフトJISで保存されたファイルをnkfコマンドで変換してみました。
-gオプションで確認してみると無事文字コードの変換が完了していることが確認できました。
次はUTF-8(BOM無)をUTF-8(BOM有)に変換してみました。
反対にUTF-8(BOM有)をUTF-8(BOM無)に変換してみました。
–ocオプションを利用する際は改行コードの指定をしないと改行コードが上手く出力されないようです。
改行オプションを付けずに変換したファイルはWindowsのメモ帳で開くと改行が認識されませんでした。
改行コードを明示しない場合は、Unix系かMac系の改行コードになっているようですね。
サンプルコード
使いそうな文字コードへの変換コマンドをまとめてみました。
utf-8 BOM無し (改行コード:Windows)
nkf --overwrite --oc=UTF-8 -Lw filename
UTF-8 BOM有り (改行コード:Windows)
nkf --overwrite --oc=UTF-8-BOM -Lw filename
UTF-8 BOM無し (改行コード: Unix)
nkf --overwrite --oc=UTF-8 -Lu filename
UTF-8 BOM有り (改行コード: Unix)
nkf --overwrite --oc=UTF-BOM -Lu filename
EUC-JP (改行コード: 変更なし)
nkf --overwrite -e filename
EUC-JP (改行コード: Unix)
nkf --overwrite -e -Lu filename
シフトJIS (改行コード: 変更なし)
nkf --overwrite -s filename
シフトJIS (改行コード: Windows)
nkf --overwrite -s -Lw filename
参考サイト
nkf(1): Network Kanji Filter – Linux man page
Ubuntu Manpage: nkf – ネットワーク用漢字コード変換フィルタ