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

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

这样做有更清洁的方法吗?

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

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

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

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

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