c#/.net を使用して Windows デスクトップ アプリケーションを開発しており、Windows エクスプローラーを開いてアプリケーションからコンピューター内のクエリを検索する機能を追加したいと考えています。
Windows検索プロトコルを使用して実装する予定です。以下は私のコードスニペットです。rawQuery はアプリケーションから Windows エクスプローラーの検索ボックスに渡されます。
var query = "&query=" + HttpUtility.UrlEncode(rawQuery);
var location = string.Empty;
foreach (var drive in DriveInfo.GetDrives().Where(d => d.IsReady && d.DriveType.Equals(DriveType.Fixed)))
{
location += "&crumb=location:" + HttpUtility.UrlEncode(drive.Name);
}
var searchQuery = "search:displayname=Search computer" + query + location;
Process.Start(searchQuery);
上記のコードには問題があります。rawQuery に英語以外の文字が含まれている場合、エンコードされた後 (HttpUtility.UrlEncode())、Windows エクスプローラーの検索ボックスに正しく表示されません。たとえば、rawQuery が「微软」のような中国語の場合、windows エクスプローラーで 微软 を検索します。これは悪いです。
ただし、rawQuery がエンコードされていない場合、&、% などの特殊文字は Windows エクスプローラーの検索ボックスに表示できません。
そのため、文字をエンコードする必要があるかどうかを判断する方法がわかりません。search protocol specでそれに関するドキュメントは見つかりませんでした。
どの文字をエンコードする必要があるか知っている人はいますか?