【发布时间】:2010-12-27 23:32:36
【问题描述】:
我有 file:// 链接,其中包含以 UTF-8 进行 UrlEncoded 的非英文字符。为了让这些链接在浏览器中工作,我必须重新编码它们。
file://development/H%C3%A5ndplukket.doc
变成
file://development/H%e5ndplukket.doc
我有以下有效的代码:
public string ReEncodeUrl(string url)
{
Encoding enc = Encoding.GetEncoding("iso-8859-1");
string[] parts = url.Split('/');
for (int i = 1; i < parts.Length; i++)
{
parts[i] = HttpUtility.UrlDecode(parts[i]); // Decode to string
parts[i] = HttpUtility.UrlEncode(parts[i], enc); // Re-encode to latin1
parts[i] = parts[i].Replace('+', ' '); // Change + to [space]
}
return string.Join("/", parts);
}
有没有更清洁的方法?
【问题讨论】:
-
实际上URI编码中使用的编码取决于服务器。 W3C 建议使用 UTF-8。但是...当您使用 file:// URL 时,浏览器就是服务器,因此这取决于浏览器...如果您打算在非西方平台(非 ISO-8859-1)中使用它,请检查一下。 ..
标签: c# utf-8 urlencode iso-8859-1 urldecode