如何使用带有unicode符号的Process.Start()(例如)

时间:2015-09-14 11:49:37

标签: c# .net unicode

我正在尝试使用Process.Start()启动带有Unicode符号的URL,但它会给出一个Win32Exception:

An unhandled exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll

Additional information: Das System kann die angegebene Datei nicht finden 

(英文:“系统找不到指定的文件”)

我要调用的URL是http://. la(这是一个有效的网址,至少对于Firefox 38而言)

在@Codo的建议之后我改变了我的代码:

string link = "http://.la";
try
{
    Process.Start(link);
}
catch (System.ComponentModel.Win32Exception)
{
    Process.Start("IExplore.exe", link);
}

2 个答案:

答案 0 :(得分:4)

不要让Firefox愚弄你。 URL中不允许使用ASCII码以外的Unicode字符,尤其是表情符号;他们需要编码。 Firefox用户友好,接受它们,显示它们,但一旦执行请求就自动对它们进行编码。

如果Unicode字符在域名中,则需要进行Punycode编码。如果Unicode字符位于域名之后,则需要对其进行URL编码。

您案例的有效网址为:http://xn--ls8h.la/

答案 1 :(得分:0)

试试这些:

http://xn--ls8h.la/(Punycode)

http://%F0%9F%92%A9.la/(网址转义码)

看看RFC 3986。 URL只能包含US-ASCII字符。