我使用以下代码在默认浏览器中打开网址:
string url;
//...
Process.Start(url);
但是它将失败并抛出带有某些URL的Win32Exception
,例如:
https://tw.news.yahoo.com/%E6%95%B8%E4%BD%8D%E8%BA%AB%E5%88%86%E8%AD%89%E6%93%AC9%E6%9C%88%E6%8F%90%E6%A8%A3%E5%BC%B5-%E5%BE%90%
堆栈跟踪如下:
System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified.
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(String fileName)
at MyApp.GoURL(String url)
我一直在将默认的浏览器从Firefox切换到chrome,edge,brave ...等。
中尝试了一些解决方法Process.Start(
new ProcessStartInfo("cmd", $"/c start {url}")
{ CreateNoWindow = true });
或
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start(psi);
但仍然没有运气,无法打开我的默认浏览器。错误消息仍为The system cannot find the file specified.
有solutions个开放的Internet Explorer,但不符合我的规范。
如何在任何默认浏览器中打开此类网址?
答案 0 :(得分:0)
您可以让UriBuilder类为您完成解码的工作。
string urlEncoded = @"https://tw.news.yahoo.com/%E6%95%B8%E4%BD%8D%E8%BA%AB%E5%88%86%E8%AD%89%E6%93%AC9%E6%9C%88%E6%8F%90%E6%A8%A3%E5%BC%B5-%E5%BE%90%";
var builder = new UriBuilder(urlEncoded);
Process.Start(builder.ToString());
实际上,这只是对原始字符串的一个小修改,增加了服务端口,但足以使字符串成为公认的URL。
如果您尝试使用WebUtility类对其进行解码,则它将无法正常工作:
string urlDecoded = WebUtility.UrlDecode(urlEncoded);
Process.Start(urlDecoded); // Fail