我正在使用 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中没有找到任何相关文档。
有人知道应该编码哪些字符吗?