Windows10:コマンド処理で日本語が文字化けしたときは(nkf)

Windowsのコマンドプロンプトでサポートされている文字コードは、基本的には「Shift_JIS」のみです。以前はそれでも特段問題にはなりませんでしたが、最近ではWebを始めとして「UTF-8」が使われるケースが多くなっており、Windowsコマンドでも複数の文字コードを扱いたい機会が増えています。

Windows環境でも、メモ帳やPowerShellを使えば文字コードを変換することができますが、使い勝手がいまいちです。そこで、Windows上での文字コード変換ツールとして定番と言われている「nkf(Network Kanji Filter)」を紹介します。

nkf(Network Kanji Filter)とは

nkfは、文字コード変換ツールとしてかなりの歴史があります。

nkfは1987年、市川 至らによって開発された。ソースコードが公開され、有志によってBSDやWindowsへも移植された。

nkfが対応する文字コードはJIS コード、cp932(Shift-JIS)、 日本語 EUC、UTF-8、UTF-16であり、相互に変換することができる。 入力/出力はファイルからのみではなく標準入力/標準出力を利用することも可能である。 入力の文字コードはできる限り自動判別するため、基本的には出力の文字コードを指定するだけで使用できる。

Network Kanji Filter - Wikipedia

Windows環境への「nkf」インストール方法

Windows向けのnkfツールは、以下のサイトから入手できます。

nkf.exe nkf32.dll Windows用の詳細情報 : Vector ソフトを探す!

ダウンロードしたファイルを展開し「vc2005\win32(98,Me,NT,2000,XP,Vista,7)Windows-31J」フォルダーの中にある「nkf32.exe」という実行ファイルを、パスの通ったフォルダーに保存しておきます。(「nkf32.exe」は、オプション指定なしで使うとShift_JISに変換してくれます)

nkfコマンドの使い方

nkfは「nkf ファイル名」でファイルを指定したり、パイプなどを利用して標準入力から受け取った内容を変換して、標準出力に書き出すことができます。

文字コードを指定する場合は、次のようなオプションを指定します。これ以外のオプションについては、ツールに付属しているヘルプファイル(nkf.txt)を参照してみてください。

オプション 説明
-j JISコード
-e EUCコード
-s Shift_JISコード
-w UTF-8(BOMなし)
-w8 UTF-8(BOMあり)
-w16 UTF-16(ビッグ・エンディアン。BOMあり)
-w16L UTF-16(リトル・エンディアン。BOMあり)

たとえば、Windowsのメモ帳で文字コードUTF-8のテキストファイルを用意して、コマンドプロンプトからtypeコマンドで表示すると、以下のように文字化けします。

これをnkfコマンドを利用しShift_JISに文字変換することで、正常に表示することができます。リダイレクトを使用すれば、変換後のテキストをファイルに保存することもできます。

上の例では、パイプを使って変換していますが、次のように直接ファイルを指定して変換することもできます。

nkf -s e:\utf8.txt

まとめ

nkfは、文字コード変換で使われる定番のツールと言えます。かなり古くからあるツールですが、いまだに現役とはすごいです。

スポンサーリンク