Windows7のデスクトップ検索(Windows Search)を使って資料を検索する際、時々、指定した文字列を含んでいるはずなのに見つからないファイルがあるのが気になっていたのだが、ようやくその理由が判明した。
テキストファイルが文字コードUTF-8で保存されていると、その内容を全文検索できないのである。
理由は、テキストファイルをインデックス化するフィルターが文字コードを自動判別せず、デフォルトの文字コード(日本語WindowsではShift JIS)として扱ってしまうため。
これを避けるには、先頭にBOM(Byte Order Mark)を付加すればよいとのこと。
WindowsSearchのプレインテキストフィルターは文字コードとしてはローカル(この場合CP932)決め打ちで、自動判別しない。件のテキストはUTF8だったので、そのままではファイル内の日本語文字列はインデックス化されない。…UTF8のBOMをファイル先頭に付加すればOK。
せっかくなので、ちょっと実験してみた。
TeraPadの「文字/改行コード指定保存」で同じテキストを各種の文字コードで保存し、検索できるかチェック。
検索結果は以下のとおり。
SHIFT-JIS、UTF-8(BOMあり)、Unicode(UTF-16LE)は○、
JIS、EUC(EUC-JP)、UTF-8N(BOMなし)は×である。
テキストファイルを保存するときは、SHIFT-JISかUnicode(JIS外漢字を含む場合など)あたりにしておくのがよさそうだ。