.net - .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
部分之后,有:
- 连字符
- 从左到右的标记 (%e2%80%8e)
- 一个破折号(更长的连字符:%e2%80%93)
- 连字符
这两个连字符不会被 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 编码的。浏览器似乎也很好。
解决方案
感谢@Simon Mourier 的评论,我发现这个问题没有出现在.NET Framework 4.7.2 中。
由于我们使用的是 .NET Framework 4.7.1,因此我检查了 4.7.2 的更改日志,结果是:“修复了 System.Uri 中的一个问题,即在解析过程中 Unicode 双向控制字符会从 Uri 中剥离。” .
看起来它确实是一个错误,现在已经修复了。
推荐阅读
- c - 为什么循环有问题(pset2 替换)
- python - 类“property”没有定义“__getitem__”,因此不能在其实例上使用“[]”运算符
- c++ - constexpr constexpr 函数指针数组
- php - 我试图通过 PHP 创建一个表(“cats”)但无法访问数据库
- android - 在cardview中使用意图时没有响应
- angular - Angular 9 动画 - 如何在不将组件包装在新 div 中的情况下为组件的单个销毁设置动画?
- python-3.x - 尝试制作 Discord bot,收到以下错误:RuntimeError: SSL is not supported
- mysql - 无法打开表设置窗口并出现错误“为对象获取 DDL 时出错,未选择数据库”
- sql - SQL 更改创建以更改语法错误
- javascript - 带有json的后请求,如何访问正文?