対象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は、文字コード変換作業ではよく使われる定番のツールである。コマンド・プロンプト上で作業する機会が多い管理者はぜひ用意しておきたい。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.