.NET Framework 和特殊字符中的 Uri class 问题

Problem with Uri class in .NET Framework and special characters

我有一个包含 left-to-right mark 字符的图像 URL。 这是一个不可打印的字符,用于设置相邻字符相对于文本方向的分组方式。 这是原文URL:https://simply-listening.nl/wp-content/uploads/2021/03/Toyah-‎–-Anthem.jpg。 当 URL 对 URL 进行编码时,您会得到:https://simply-listening.nl/wp-content/uploads/2021/03/Toyah-%e2%80%8e%e2%80%93-Anthem.jpg

我看起来有点困惑: 在 Toyah 部分之后,有:

两个连字符不会 URL 编码,但从左到右的标记和破折号是。

这一切都很好,您可以在 Chrome 中打开未编码和编码的 URLs 而没有问题。 问题是当我用这个 URL.

创建一个 Uri class 实例时
new Uri("https://simply-listening.nl/wp-content/uploads/2021/03/Toyah-%e2%80%8e%e2%80%93-Anthem.jpg")

创建的实例有一个 AbsoluteUri 属性 具有以下值: https://simply-listening.nl/wp-content/uploads/2021/03/Toyah-%E2%80%93-Anthem.jpg

如您所见,从左到右的标记字符已从 URL 中删除,当然 URL 不再有效。

Uri class 会从 URL 中删除某些字符(甚至编码)是否有原因?我假设任何在 URL 中无效的字符仍然可以使用,只要它是 URL 编码的。浏览器似乎也很好。

感谢@Simon Mourier 的评论,我发现问题并未出现在 .NET Framework 4.7.2 中。

因为我们使用的是 .NET Framework 4.7.1,所以我检查了 4.7.2 的变更日志,它是:"Fixed a problem in System.Uri where Unicode bidirectional control characters would be stripped from a Uri during parsing.".

看来确实是个bug,现在已经修复了。