【发布时间】:2012-12-27 17:04:04
【问题描述】:
我有一个应用程序,用户可以在其中上传名称可以包含非拉丁字符(例如西里尔文或中文)的文件。例如:
http://localhost/привет мир.html
然后我需要能够为非法和/或特殊字符(如空格)对文件名进行 URL 编码。当我按如下方式对 URI 进行 URL 编码时:
string uri = "http://localhost/привет мир.html";
string encoded = HttpUtility.UrlPathEncode(uri);
Console.WriteLine(encoded);
这给了我以下结果:
http://localhost/%d0%bf%d1%80%d0%b8%d0%b2%d0%b5%d1%82%20%d0%bc%d0%b8%d1%80.html
我真正想要的是:
http://localhost/привет%20мир.html
大多数浏览器都支持这种格式,我的用户(在这种情况下是俄罗斯人)需要能够以他们的语言和字符集看到更便于显示的 URL。
有没有办法对一个 URI 进行 URL 编码并且不编码某些字符集?
【问题讨论】:
-
您是否尝试过使用特定编码的
UrlEncode(string str, Encoding e)重载? -
@SimonMourier - 这不会做任何事情。使用的编码已经是 Unicode 编码。
-
问题是 URL 编码意味着 URL 上的所有内容都是 ASCII ......当然西里尔字符不是。您可能需要编写自己的 URL 编码例程。
-
我希望有一些OOB,但我有一种感觉,我必须自己写。谢谢大家的信息!