代码之家  ›  专栏  ›  技术社区  ›  Mikael Svenson

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

  •  4
  • Mikael Svenson  · 技术社区  · 15 年前

    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 回复  |  直到 15 年前
        1
  •  1
  •   loosleef    15 年前

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

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

        2
  •  0
  •   Don    15 年前

        3
  •  0
  •   James Manning    15 年前

    诚然,这很难看,并不是一个真正的改进,但是可以重新编码整个过程(避免拆分/迭代/连接)。替换(“%2f”,“/”)