将url从utf-8编码重新编码为iso-8859-1编码

时间:2009-12-18 09:04:18

标签: c# utf-8 urlencode iso-8859-1 urldecode

我有文件://链接非英文字符,这些字符是以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);
}

有更清洁的方法吗?

3 个答案:

答案 0 :(得分:1)

我觉得实际上很干净。它是可读的,你说它的功能正常。只要实施对消费者来说是隐藏的,我就不会担心挤出最后的改进。

如果你正在过度地执行此操作(例如每个事件执行数百次),我会考虑从UrlEncode / UrlDecode中取出实现并将它们相互流式化以通过消除对字符串拆分的需要来提高性能加入,但测试必须证明无论如何,绝对不会“干净”: - )

答案 1 :(得分:0)

虽然我没有看到任何改变它的真正方法会产生影响,但是你应该在你的UrlEncode之前将+替换为空格,以便它变成%20吗?

答案 2 :(得分:0)

当然丑陋并不是真正的改进,但可以重新编码整个事情(避免分割/迭代/加入)然后.Replace(“%2f”,“/”)

我不明白想要在最终结果中保留空格的代码 - 看起来如果它仍然有空格,你最终会得到实际编码的东西吗?