首页 > 解决方案 > .NET Framework 中的 Uri 类和特殊字符的问题

问题描述

我有一个包含从左到右标记字符的图像 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 中打开非编码和编码的 URL。问题是当我用这个 URL 创建一个 Uri 类实例时。

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 类是否有理由从 URL 中删除某些字符(甚至编码)?我假设任何在 URL 中无效的字符仍然可以使用,只要它是 URL 编码的。浏览器似乎也很好。

标签: .neturiurlencode

解决方案


感谢@Simon Mourier 的评论,我发现这个问题没有出现在.NET Framework 4.7.2 中。

由于我们使用的是 .NET Framework 4.7.1,因此我检查了 4.7.2 的更改日志,结果是:“修复了 System.Uri 中的一个问题,即在解析过程中 Unicode 双向控制字符会从 Uri 中剥离。” .

看起来它确实是一个错误,现在已经修复了。


推荐阅读