連載
» 2013年01月25日 17時39分 公開

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

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

[打越浩幸,デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象OS:Windows OS



解説

 Windows OSをCUIで使うにはコマンド・プロンプト(コマンドの実体はcmd.exe)を開いて作業するが、日本語Windows OSのコマンド・プロンプトでサポートされている文字コードは、基本的にはShift JISコードだけである。コマンド・プロンプト上で使う各コマンドに対して日本語文字列の引数やパス名を与える場合は、Shift JISコードにする必要がある。テキスト処理するコマンド、例えばfindやmoreなどはShift JISコードしか正しく処理できない(表示だけならUTF-16が使える場合もある)。だが最近ではUnicode、中でもUTF-8が使われるケースも多くなっており(特にWebなど)、複数の文字コードを扱う機会は増えている。

 このような場合は、あらかじめ文字コードを1種類に統一してから処理するのが普通である。メモ帳やPowerShellを使えばさまざまな種類のテキスト・ファイルを読み込んで異なる文字コードで保存できるが(TIPS「文字コードを変換する」「PowerShellで複数のファイルの文字コードを一括変換する」参照)、コマンド・プロンプト上で簡単に利用できるものの方が便利だろう。本TIPSでは、このような用途では定番の「nkf(Network Kanji Filter)」というツールを紹介する。

操作方法

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

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

 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 ……ShiftJISに変換する

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>
……(以下省略)……



 この例ではデフォルトの文字コード(この場合は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© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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