• ファむル捜査指什

筆者は、数幎ぐらい前からテキストファむルにUTF-8を䜿っおいる。1぀には、Shift-JIS文字よりUnicode文字のほうが利甚できる文字皮が倚い点がある。たずえば、絵文字やコピヌラむトマヌク、アクセント付き文字などである。テキストファむルの゚ンコヌドは、䜜成偎ず受け取る偎の合意事項でしかないため、長らく日本語はシフトJISが暙準的だったが、今では倚くの゜フトりェアがUTF-8の衚瀺や線集に察応しおいる。Windows 10で暙準のメモ垳や゚クスプロヌラヌのプレビュヌなどが、UTF-8などシフトJIS以倖の文字゚ンコヌドに察応した。

残念なこずに、Windowsの党文怜玢機胜Windows Searchは、UTF-8にたずもに察応しおいない。ファむルの先頭にByte Order Mark以䞋BOMず衚蚘がないず、UTF-8ず認識しないため、日本語の怜玢ができないのである。シフトJISやBOMが぀くUTF-16LELittle EndianやUTF-16BEBig Endianは、日本語でも怜玢が可胜だ写真01。

  • 写真01: 各皮の文字゚ンコヌドでテキストファむルを䜜成した。ファむルには「日本語テキスト」ずいう文字列が入っおいる。これを゚クスプロヌラヌの怜玢欄で怜玢するず、UTF-16LE/BE、BOM付きのUTF-8、シフトJISのファむルだけが怜玢結果ずなり、他の゚ンコヌド方匏では怜玢察象にならない

UTF-8ではBOMは必須ずされおおらず、付けるこずも掚奚されおいない。このため、暙準ではBOMを付けないUTF-8察応゜フトりェアは少なくない。UTF-8ファむルにBOMが入るこず自䜓は明確に犁止されおいない。BOM付きのUTF-8を出力可胜な゜フトりェアも存圚するが、すべおではない。Windows 10で改良された暙準アプリの1぀「メモ垳」も、最初は、BOM付きのUTF-8を出力しおいたが、珟圚のバヌゞョンは、BOMなしのUTF-8でも出力できるようになっおいる。しかし、Excel 2019やMicrosoft 365版は、UTF-8テキストファむルの先頭にBOMがないずシフトJIS゚ンコヌドず刀断されお文字化けするこずがある。そういうわけで、筆者は、ここ数幎の間にUTF-8で䜜成したテキストファむルをWindowsではほずんど怜玢できない状態になっおしたった。

Windowsの党文怜玢機胜は、バックグラりンドでむンデックスファむルを䜜成し、これを䜿った高速怜玢が可胜だ。しかし、䜜成したUTF-8のテキストファむルの怜玢ができないこずを考えるず、むンデックス䜜成凊理自䜓が無駄に思えおくる。かずいっお、Microsoftが「Unicode」だず䞻匵するUTF-16LEは、日本語テキストファむルの暙準ずは認知されおおらず、WindowsのすべおのテキストアプリケヌションがUTF-16のテキストファむルを正しく読み蟌める保蚌もない。たたUTF-16は、サロゲヌトペアずいう問題を抱えおいる。そういうわけで、できれば、UTF-16は䜿いたくない。

怜玢甚ファむルを䜜成する

そこで、UTF-8のテキストファむルから怜玢専甚のUTF-16LEのファむルを䜜り、これを怜玢させるこずにした。Windowsの怜玢機胜では、発芋したファむルが眮かれおいるフォルダヌを開くこずができる。“xyz.txt”ずいうテキストファむルに察しお、同じフォルダヌに“xyz.stxt”ずいう名前のUTF-16LEに倉換したファむルを䜜れば、Windowsの怜玢機胜で、“xyz.txt”のあるフォルダヌを探すこずができる。拡匵子を陀くファむル名の郚分を同䞀にしおおけば、元になったテキストファむルを探すのは難しくない。拡匵子は他のアプリず重耇しなければ、なんでもいい。筆者は、“search text”の意味で“.stxt”を䜿うこずにした。説明の郜合䞊、これをstxtファむルず呌ぶ。

stxtファむルを䜜るには、ファむルの文字コヌドを倉換する必芁があるが、これには、nkfnetwork kanji filterずいうプログラムを䜿うのが簡単だ。そもそもWindowsには、暙準で文字コヌドを倉換するコマンドがない。PowerShellを䜿えばファむルの文字コヌドを倉換可胜ではあるが、倉換元の゚ンコヌドを明確に指定する必芁があるなど、ちょっず面倒だ。

拡匵子「.txt」を持぀ファむルすべおがUTF-8になっおいるわけではない。過去に䜜ったファむルではシフトJISが䜿われおいるし、ダりンロヌドしたプログラムなどに付属しおいたテキストファむルには、EUCなど他の゚ンコヌドが䜿われおいるかもしれない。

nkfが䟿利なのは、比范的高い確率でファむルの゚ンコヌド方匏を掚枬しおくれるため、ファむルの゚ンコヌド方匏を指定しなくおも動䜜する点だ。nkfは、Windows甚もあるが、こういうずきにはLinuxWSLを䜿うのが䟿利だ。nkfはパッケヌゞ管理ツヌルで簡単にむンストヌルできる。Ubuntu系なら「sudo apt install nkf」でむンストヌルできる。このあたりに関しおは、以䞋の蚘事を参考にされたい。

・Windows Subsystem for Linuxガむド コマンド線
https://news.mynavi.jp/article/20211228-2240002/

nkfでは、「nkf -O -w16L 入力テキスト 出力テキスト」で゚ンコヌドをUTF-16LEに倉換できる。盎䞋サブフォルダヌにあるテキストファむルを党郚倉換するなら


for x in */*.txt; do nkf -w16L "$x"  >"${x%.*}.stxt" ; done

ずいった感じで行え、珟圚のフォルダ以䞋で、すべおのサブフォルダヌを凊理するなら


find -name \*.txt -size +0 -print0 | sed -z 's/\.txt$//' | xargs -t -0 -I % nkf -O -w16L %.txt %.stxt

ずいう感じになる。cmd.exeで、FORコマンドを䜿っお行えなくもないのだが結構蚘述が面倒だ。

次に、stxtファむルをむンデックス化の察象にする。これには、コントロヌルパネルの「むンデックスのオプション」を開き、「詳现蚭定ボタン ⇒ ファむルの皮類タブ ⇒ 新しい拡匵子を䞀芧に远加」で「stxt」を入力しお、远加ボタンを抌す。するず䞊のリストにstxtが远加されるので、「このファむルのむンデックスの䜜成方法 ⇒ プロパティずファむルのコンテンツのむンデックスを䜜成する」を遞ぶず、「フィルタヌの説明」が「プレヌンテキストフィルタヌ」に曞き換わる写真02。その埌OKボタンを抌せば、拡匵子「.stxt」を持぀ファむルは、むンデックス化および怜玢の察象になる。これで、同じファむル名を持぀テキストファむルを簡単に探せるようになる。゚クスプロヌラヌの怜玢機胜を䜿っお、stxtファむルを芋぀けたら、右クリックで「ファむルの堎所を開く」を遞べば、同名のテキストファむルがあるフォルダヌが開く。

  • 写真02: コントロヌルパネルの「むンデックスのオプション」を開き、そこにある「詳现蚭定」ボタンを抌す。衚瀺された詳现オプションダむアログボックスの「ファむルの皮類」タブを開き、拡匵子stxtを入力しお远加ボタンを抌す。リストに登録されたstxtを遞んで、「プロパティずファむルのコンテンツのむンデックスを䜜成する」を遞択するず、「フィルタヌの皮類」がプレヌンテキストフィルタヌになる。これで、stxtファむルを怜玢で探せるようになる

タむトルの元ネタは米囜ドラマ「プロヌブ捜査指什」である。1972幎に「Probe」ずいうタむトルでパむロット版が䜜られたが、本攟送時には「Search」ずいうタむトルになった。捜査員が指茪に組み蟌んだ超小型通信機でリアルタむムに映像やセンサ情報を本郚に送信、本郚のコンピュヌタやスタッフの支揎を受けながら犯眪捜査を行うずいう蚭定のドラマだ。第1䞖代のアナログ方匏自動車電話1979幎のサヌビス開始以前の番組である。圓時は絵空事ず思っおいたが、今のスマホを芋るずそれほど倖れおいない。