Linux logo

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コマンドとほぼ同じ結果が得られました。

nkfコマンドで文字コードを変換

試しにシフトJISで保存されたファイルをnkfコマンドで変換してみました。

-gオプションで確認してみると無事文字コードの変換が完了していることが確認できました。

Linux nkfコマンド BOM有 変換

次はUTF-8(BOM無)をUTF-8(BOM有)に変換してみました。

Linux nkfコマンド 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 – ネットワーク用漢字コード変換フィルタ

【Linux】nkfコマンド / 文字コードを変換する
Tagged on:

コメントを残す