这是一个奇怪的问题,但让我们看看它会得到什么样的回应......
如果我编写一个控制台应用程序(VS 2013,.NET 4.5.1)并执行这行代码:
Uri.EscapeUriString("[")
我明白了:
[
但是,如果我执行同样的事情(嗯,从技术上来说Uri.EscapeUriString("[").Dump()
)在我的机器上的 LINQPad 中我得到这个:
%5B
让事情变得更加复杂的是,根据这篇文章 https://stackoverflow.com/a/11236038/1068266 Uri.EscapeUriString("[")
确实应该返回%5B
.这篇文章写于2012年6月27日。
我认为 LINQPad 引用的 DLL 可能比 VS 使用的旧 DLL,但这意味着EscapeUriString
最近发生了变化,我找不到任何记录。有谁知道什么可能导致这种行为?
这在 .Net 4 和 .Net 4.5 之间发生了变化,您可以通过将框架版本重新定位到 .Net 4 并运行测试程序来验证这一点。
.Net 4 -> 输出“%5B”
.net 4.5(或更高版本)-> 输出“[”
这里提到了这一点:.NET Framework 4.5 中的应用程序兼容性 http://msdn.microsoft.com/en-us/library/hh367887%28v=vs.110%29.aspx
在以下部分下Uri.EscapeDataString 、 Uri.EscapeUriString 和 Uri.UnescapeDataString,其中指出(使用 .Net 4.5):
现在支持保留和非保留字符列表RFC 3986 https://www.rfc-editor.org/rfc/rfc3986.
具体变化:
Unreserved escaped characters are un-escaped.
EscapeDataString escapes reserved characters based on RFC 3986.
EscapeUriString does not escape reserved characters.
UnescapeDataString does not throw an exception if it encounters an invalid escape sequence.
特别是,它是EscapeUriString 不转义保留字符这很重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)