2020-11-04

Windows 10でメモ帳(Notepad)のデフォルト漢字コードがUTF-8になって、全文検索されない問題への解決策 - htmlインデクサを使用

WindowsのテキストファイルもようやくShift-JISからUTF-8に移行してきました。
Windows 10 1903から、メモ帳(Notepad.exe)のデフォルト漢字コードがUTF-8になりました(それも従来のWindowsのBOM付きではなくて、LinuxやmacOSと同じBOMなしのUTF-8)。
これはとてもとても良いことだと思います。

しかしながら非常に残念なことに、Microsoftさんの片手落ちで、デスクトップ検索(全文検索)からUTF-8のテキストファイルが検索で引っかからなくなってしまっているのです。
Shift-JISやUTF-8N(BOM付き、従来のWindowsのUTF-8)のファイルは問題ないのに、メモ帳の現在のデフォルトのUTF-8ファイルがダメなのです。

最悪、自分でIFilterを書こうかとまで思ったのですが(nkfみたいに自動文字コード識別)、いい方法を思いつきました。

従来からHTMLファイルは文字コードの自動判別機能を持っていて、当然Shift-JISにもUTF-8にも対応しています。
テキストファイル用のデフォルトのIFilterを使わずに、HTMLファイル用のIFilterに差し替えればと思い、やってみたところ、すこぶる良好です。
(エンジニア用のメモ:Windows Platform SDKのfiltdumpでも検証しましたが、HTMLなので改行コードが無視されるという違いはありますが、キッチリ漢字文字を認識できるようになります。)

設定にはRegeditを使います。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.txt\PersistentHandler の内容を HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.html\PersistentHandler の内容で置き換えればよいです。
つまり手順としては、次の内容をコピペし、 classes-txt-handler.reg というファイルに「UTF-16 LE (BOM付き)」で保存して(図のひとつめのアイコンになること)、ダブルクリックしてください。
(.reg ファイルに保存したときに、メモ帳のアイコンではなくて、レジストリのアイコンになることが肝要です。拡張子を表示していないと classes-txt-handler.reg.txt というファイルになる間違いが起こりがちですので要注意です。)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.txt\PersistentHandler]
@="{eec97550-47a9-11cf-b952-00aa0051fe20}"
"既定.save"="{5e941d80-bf96-11cd-b579-08002b30bfeb}"
"既定.html"="{eec97550-47a9-11cf-b952-00aa0051fe20}"

設定を反映するには、もう一つおまじないが必要です。
スタートメニューを開いた状態で index と入力して出てくる [インデックスのオプション] を起動して、「xxx個のインデクスが作成されました」のところのファイル数をまずはメモしておいてください。
[詳細設定] ボタンを押し、[再構築] を押して、検索インデックスを作り直してください。
[インデックスのオプション] の画面に進捗状況が表示されます(私の場合は完了までに24時間くらいかかりました)。

上記regファイルには、オリジナルの設定値を「規定.save」のところに書き込んでありますので、元に戻したくなった時(将来、標準でUTF-8がサポートされた暁に)はその値を「@」のところにコピーしすればよいです。

あと、Windows 7の頃は検索ツールで、PC上のファイルもOutlookのメールもまとめて検索出来ていたのですが、(古い話ですが)Windows 8+Outlook 2013以降はそういうことができる画面がなくなってしまいました。
ファイルの検索はスタートメニューかWindows Explorerで、メールの検索はOutlookで、と分断されてしまっていました。
しかしながら、Windows OSの検索インデックスDBはどちらの内容も取り込んでいるので、何とかできないかというのは当然の思い(Windows 7を知らない世代はそういうものと思っているかもしれませんが)でして、じつは何とかする方法があります。

次の内容をコピペして indexed-Locations.search-ms というファイルに保存してください(ここでも拡張子に注意、図の2つめのアイコンになること)。

<?xml version="1.0"?>
<persistedQuery version="1.0">
  <query>
    <kindList>
      <kind name="item" />
    </kindList>
    <scope knownScopeID="{f60163ce-2b8d-458d-ab2c-40f215767514}" />
  </query>
</persistedQuery>

この水色アイコンをダブルクリックするとWindows Explorerの窓が開きます。
検索ボックスにキーワードを入力してReturnを押すと、全ファイル・全メールからの全文検索ができるようになります。
このファイルを [スタートメニューにピン止め] しておけばすぐに呼び出せてとても便利です。
(Windows 7のことを覚えているひと向け:当時は検索結果のメールアイテムをダブルクリックすると開けたのですが、今はもうダブルクリックできなくなりました。残念ながらOutlookの中で再度 [すべてのメールボックス] で検索して開く必要があります。)


全文検索のデスクトップ検索については、最初はWindowsが先行し、途中Google Desktop Searchの時代があり(PCのファイルの内容までもがGoogleの検索エンジンに持っていかれるので私は到底使えませんでした)、今ではmacOSの方がキッチリ動いています。
今回紹介した設定で多少なりともWindows Desktop Search(WDS)が使い物になれば良いな、と願います。

[2024-03-19] regファイルはUCS-2またはUTF-15 LE BOM付きにしないと漢字データが文字化けするので追記しました。

No comments:

Post a Comment