nkfツールで文字コードを変換する(Windows編)Tech TIPS

Windows OSのコマンドプロンプト上でテキスト処理する場合、基本的にはShift-JISコードのテキストファイルしか扱えず不便である。その他の文字コードのテキストを扱う場合は、nkfなどのツールでShift-JISに変換/統一するとよい。

» 2013年01月25日 17時39分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows OS


コマンドプロンプトでUTF-8などShift-JIS以外の文字コードを処理したい!

 Windows OSをCUIで使うにはコマンドプロンプト(cmd.exe)を開いて作業する。日本語Windows OSの場合、このコマンドプロンプトでサポートされている文字コードは、基本的にはShift-JISコードだけである。コマンドプロンプト上で使う各コマンドに対して日本語文字列の引数やパス名を与える場合は、Shift-JISコードにする必要がある。テキスト処理するコマンド、例えばfindやmoreなどはShift-JISコードしか正しく処理できない(表示だけならUTF-16が使える場合もある)。

 しかし、最近ではUnicode、中でもUTF-8が使われるケースも多くなっており(特にWebなど)、複数の文字コードを扱う機会は増えている。

 このような場合は、あらかじめ文字コードを1種類に統一してから処理するのが普通である。

 そこで本Tech TIPSでは、コマンドプロンプト上で簡単に文字コードを変換できる「nkf(Network Kanji Filter)」というツールを紹介する。このような用途では定番のツールである。

 コマンドプロンプトにこだわらない場合は、メモ帳やPowerShellでも、さまざまな種類のテキストファイルを読み込んで異なる文字コードで保存することが可能だ。詳細はTech TIPS「文字コードを変換する」「PowerShellで複数のファイルの文字コードを一括変換する」を参照していただきたい。

Windows OSで動作する「nkf」ツールを入手する

 Windows OS向けのnkfツールのバイナリファイルは以下のサイトから入手できる。

 [ダウンロードはこちら]ボタン−[ダウンロードページへ]ボタン−[このソフトを今すぐダウンロード]ボタンとクリックして「nkfwin.zip」というファイルを入手し、適当な場所に展開する。

 内部にはいくつかの.exeファイルがあるが、オプション指定なしで使うと、デフォルトでShift-JISコードに変換してくれる「nkf32.exe」という実行ファイル([vc2005\win32(98,Me,NT,2000,XP,Vista,7)Windows-31J]フォルダの中にある)が便利なので、これを使おう。このファイルを取り出して、適当な実行パスに保存しておく。単にnkf.exeという名前に変更しておくと簡単で便利だ。

「nkf」ツールの基本的な使い方

 nkfコマンドの使い方は簡単である。単に引数なしで実行すると、入力されたテキストファイルの文字を、デフォルトの文字コードに変換して出力くれる。nkf32.exeなら、デフォルトではShift-JISに変換される(入力文字コードは自動判定される)。

 nkfはパイプコマンドとして使えるので、他のコマンドが出力したテキストの文字コードを変換してもよいし、あらかじめファイルの文字コードをまとめて変換してもよい。

*変換前のファイルでfindしてみる。
D:\textprocessing>find "details.aspx" msdownload1.html
↓以下のテキストファイルは、マイクロソフトのダウンロードサイトの一覧リストのWebページをwgetコマンド(Webサイトデータの取得ツール)で取得したもの。最近はこのようにUTF-8のページが多い
---------- MSDOWNLOAD1.HTML
      <a href="details.aspx?id=6523" bi:index="0"><img src="http://i.microsoft.com/global/en-us/download/PublishingImages/Download_Symbol.png" alt="繝・・繝" width="70" height="70" /></a>
        <div class="link"><a href="details.aspx?id=6523" bi:index="0" bi:title="item">Microsoft .NET Framework Version 2.0 蜀埼・貞ク庄閭繝
代ャ繧ァ繝シ繧ク (x64)</a></div> ……元はUTF-8なので文字化けしている
……(以下省略)……

*次はShift-JISへ変換してからfindしてみる
D:\textprocessing>nkf < msdownload1.html > msdownload2.html ……Shift-JISに変換する

D:\textprocessing>find "details.aspx" msdownload2.html ……もう一度検索する

---------- MSDOWNLOAD2.HTML
      <a href="details.aspx?id=6523" bi:index="0"><img src="http://i.microsoft.com/global/en-us/download/PublishingImages/Download_Symbol.png" alt="ツール" width="70" height="70" /></a>
        <div class="link"><a href="details.aspx?id=6523" bi:index="0" bi:title="item">Microsoft .NET Framework Version 2.0 再頒布可能パッケージ (x64)</a></div> ……日本語が正しく読める
      <a href="details.aspx?id=17851" bi:index="1"><img src="http://i.microsoft.com/global/en-us/download/PublishingImages/Download_Symbol.png" alt="ツール" width="70" height="70" /></a>
        <div class="link"><a href="details.aspx?id=17851" bi:index="1" bi:title="item">Microsoft .NET Framework 4 (Web インストーラー)</a></div>
……(以下省略)……



「nkf」ツールでさまざまな文字コードを処理するためのオプション

 上記の例ではデフォルトの文字コード(この場合はShift-JIS)に変換している。他の文字コードにしたければ、次のようなオプションを指定する。詳しくはnkfに付属の説明ファイル(nkf.txt)を参照のこと。

オプション 文字コード
-j JISコード
-e EUCコード
-s Shift-JISコード。メモ帳の「ANSI」はこのタイプ
-w UTF-8(BOMなし)
-w8 UTF-8(BOMあり)。メモ帳の「UTF-8」はこのタイプ
-w16 UTF-16(ビッグエンディアン。BOMあり)。メモ帳の「Unicode big endian」はこのタイプ(*付属のnkf.txtドキュメントには「BOMなし」となっているが、実際にはBOMが付いているようである
-w16L UTF-16(リトルエンディアン。BOMあり)。メモ帳の「Unicode」はこのタイプ
nkfの主要な文字コード指定オプション
これ以外のオプションについては付属の説明ファイルを参照のこと。BOMとは「Byte Order Mark」の略であり、バイトの並び順を識別するためのデータ(コードでいえばU+FEFF)。ビッグエンディアンとリトルエンディアンはバイトの並び順の種類。

 nkfは、文字コード変換作業ではよく使われる定番のツールである。コマンドプロンプト上で作業する機会が多い管理者はぜひ用意しておきたい。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。