我的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);
}


有没有更干净的方法可以做到这一点?

最佳答案

我认为这实际上很干净。它是可读的,您说它可以正常运行。只要用户看不到实现,我就不用担心最后的改进。

如果您过多地执行此操作(例如每个事件执行数百次),我会考虑将实现从UrlEncode / UrlDecode中取出,并将它们彼此流传输,从而通过消除对字符串拆分/连接的需求来提高性能,但是测试将必须证明这一点,并且绝对不会“干净” :-)

10-04 12:05