日本語文字コードの変換を行う・nkfコマンド

nkf(Network Kanji Filter)コマンドを使用すると、文字コードや改行コードの変換を行うことができます。
現代のLinux(AlmaLinux、Rocky Linux、Ubuntuなど)では初期インストールされていない場合があるため、
必要に応じてインストールしてください。

dnf install nkf
apt install nkf

【現代のLinux環境における注意点】
本記事で紹介している nkf コマンドは、文字コードの自動判定や変換において今でも非常に強力なツールですが、現在の主要なLinux(AlmaLinux、Rocky Linux、Ubuntuなど)では
初期インストールから外されているケースが多くなっています。 現代のLinuxにおける標準的な文字コード変換コマンドは iconv です。
環境によっては、事前に dnf install nkf や apt install nkf でインストールするか、標準の iconv コマンドへの移行を検討してください。

以下に、nkfコマンドを使用して各種日本語文字コードの変換実行例を記します。

■目次


スポンサーリンク

関連記事・関連資料

UTF-8から各種日本語の文字コードに変換してみる

以下のようなUTF-8で作成した文字を格納したテキストファイルを用意しました。

$ cat aiueo-utf8.txt 
aiueo
あいうえお
kakikukeko
かきくけこ
sasisuseso
さしすせそ
tatituteto
たちつてと

以降、このファイルを各種日本語文字コードに変換してみます。
注意
デフォルトでは改行コードは変換されません。

UTF-8からSJIS

以下のコマンドによりShift_JISに変更されます。

cat 入力ファイル名 | nkf -s > 出力ファイル名

または、

nkf -s < 入力ファイル名 > 出力ファイル名

または、

nkf -s 入力ファイル名 > 出力ファイル名

実行例

$ cat aiueo-utf8.txt | nkf -s > aiueo-sjis.txt
$ kcc -c aiueo-sjis.txt
aiueo-sjis.txt: shift-JIS
$ nkf -g aiueo-sjis.txt 
Shift_JIS

上記の-sオプションは出力の文字コードをShift_JISとして出力するように指定しています。

入力の文字コードも明示的に指定する場合は、以下のように-Wオプションを指定します。
(文字コードの自動判定がうまく動作しない場合)

cat 入力ファイル名 | nkf -W -s > 出力ファイル名

または、

nkf -W -s < 入力ファイル名 > 出力ファイル名

または、

nkf -W -s 入力ファイル名 > 出力ファイル名

実行例

$ nkf -W -s < aiueo-utf8.txt > aiueo-sjis2.txt
$ kcc -c aiueo-sjis2.txt 
aiueo-sjis2.txt:        shift-JIS
$ nkf -g aiueo-sjis2.txt 
Shift_JIS

元のファイルを直接上書き変換する場合

別ファイルに出力せず、元のファイルをそのまま変換(上書き)したい場合は、`--overwrite` オプションが便利です。

nkf -s --overwrite 入力ファイル名

SJISをUTF-8に変換

上記のコマンドで作成されたaiueo-sjis.txtを使用してUTF-8に戻してみます。
以下の実行例のようにオプションをつなげて記述することも可能です。
オプション-wは出力をUTF-8でオプション-Sは入力をShift_JISと指定しています。

$ nkf -wS aiueo-sjis.txt > aiueo-utf8-2.txt
$ diff aiueo-utf8-2.txt aiueo-utf8.txt 

EUCやJISに変換する方法

EUC関しては以下のようになります。
尚、以下の構文は入力文字コードを明示的に指定していない例になります。

nkf -e 入力ファイル > 出力ファイル

または、

nkf -e < 入力ファイル名 > 出力ファイル名

または、

nkf -e 入力ファイル名 > 出力ファイル名

実行例

$ nkf -e aiueo-utf8.txt > aiueo-euc.txt 
$ nkf -g aiueo-euc.txt 
EUC-JP

JISに関しては以下のようになります。 尚、以下の構文は入力文字コードを明示的に指定していない例になります。

nkf -j 入力ファイル > 出力ファイル

または、

nkf -j < 入力ファイル名 > 出力ファイル名

または、

nkf -j 入力ファイル名 > 出力ファイル名

実行例

$ nkf -j aiueo-utf8.txt > aiueo-jis.txt 
$ nkf -g aiueo-jis.txt 
ISO-2022-JP

改行コードの変換

改行コードの変換オプションは以下の通りです。

オプション動作
-Lu -dLF
-Lw -cCRLF
-LmCR

実際に改行コードも変換してみます。
改行コードの確認方法については、いかのような資料を公開しています。

入力ファイルは上記で使用したaiueo-utf8.txtを使用します。
改行コードはLFになります。

$ cat aiueo-utf8.txt 
aiueo
あいうえお
kakikukeko
かきくけこ
sasisuseso
さしすせそ
tatituteto
たちつてと
$ cat -v aiueo-utf8.txt 
aiueo
M-cM-^AM-^BM-cM-^AM-^DM-cM-^AM-^FM-cM-^AM-^HM-cM-^AM-^J
kakikukeko
M-cM-^AM-^KM-cM-^AM-^MM-cM-^AM-^OM-cM-^AM-^QM-cM-^AM-^S
sasisuseso
M-cM-^AM-^UM-cM-^AM-^WM-cM-^AM-^YM-cM-^AM-^[M-cM-^AM-^]
tatituteto
M-cM-^AM-^_M-cM-^AM-!M-cM-^AM-$M-cM-^AM-&M-cM-^AM-(

以下の実行例は、UTF-8で改行がLFのファイルをSJISで改行がCRLFに変換したときの出力です。 オプション -Lw -cで改行コードをCRLFに変換するように指定しています。

$ cat aiueo-utf8.txt | nkf -s -Lw -c > aiueo-sjis-crlf.txt

変換後の確認です。
文字コードはSJISに変換されました。

$ nkf -g aiueo-sjis.txt 
Shift_JIS

catコマンドの-vオプションを使って特殊文字を表示するようにしています。
文字列末尾にある^MによりCRが追加されているのが確認できます。

$ cat -v aiueo-sjis-crlf.txt 
aiueo^M
M-^BM- M-^BM-"M-^BM-$M-^BM-&M-^BM-(^M
kakikukeko^M
M-^BM-)M-^BM-+M-^BM--M-^BM-/M-^BM-1^M
sasisuseso^M
M-^BM-3M-^BM-5M-^BM-7M-^BM-9M-^BM-;^M
tatituteto^M
M-^BM-=M-^BM-?M-^BM-BM-^BM-DM-^BM-F^M

他の改行オプションについての実行例は省略しますが、上記実行例の-Lw -c部分を入れ替えることにより動作がかわります。

nkfのオプション(抜粋)

詳細なnkfのオプションはmanコマンドにて確認して頂くとして、よく使うと思われるオプションを以下に記します。

オプション機能
-jJISコードを出力する。
-eEUCコードを出力する。
-sShift_JISコードを出力する。
-wUTF8コードを出力する。(BOM 無し)
-J入力のコードをISO-2022-JPと仮定する。
-E入力のコードをEUC-JPと仮定する。
-S入力のコードをShift_JISと仮定する。
-W入力のコードをUTF-8と仮定する。

まとめ

本記事では nkf コマンドを使った文字コードや改行コードの変換方法について解説しました。
現代のLinux環境では、デフォルトで利用できる iconv コマンドが推奨される場面も増えていますが、
文字コードの自動判定(`-g` オプション)や、ファイルをその場で書き換える(`--overwrite` オプション)といった機能において、
nkf は現在でも非常に強力で便利なツールです。
環境や用途に応じて、使い分けてみてください。


スポンサーリンク


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2026-06-05 (金) 06:30:56