Uri.EscapeDataString很奇怪为什么EscapeDataString在.NET4和4.5之间的行为不同?输出是文档。默认情况下,EscapeDataString方法将除RFC2396未保留字符之外的所有字符转换为十六进制表示形式。如果启用了国际资源标识符(IRI)或国际化域名(IDN)分析,则EscapeDataString方法会将除RFC3986未保留字符之外的所有字符转换为其十六进制表示形式。所有Unicode字符在转义前都转换为UTF-8格式。作为参考,未保留字符在RFC2396中定义如下:unreserved=alphanum|标记标记=“-”|“_”|“。”|“!”|“~”|“*”|"'"|("|")"InRFC3986:ALPHA/DIGIT/"-"/"."/"_"/"~"Sourcecode看起来EscapeDataString的每个字符是否被转义大致相同是x7F以上的unicode吗?PERCENTENCODE:是百分号?是转义符?LEAVEALONE:PERCENTENCODE:强制字符?PERCENTENCODE:非保留字符?和RFC3986之间选择。}如果(UriParser.ShouldUseLegacyV2Quirks){返回(RFC2396UnreservedMarks.IndexOf(c)>=0);}返回(RFC3986UnreservedMarks.IndexOf(c)>=0);而那段代码指示的是privatestaticreadonlyUriQuirksVersions_QuirksVersion=(BinaryCompatibility.TargetsAtLeast_Desktop_V4_5//||BinaryCompatibility.TargetsAtLeast_Silverlight_V6//||BinaryCompatibility.TargetsAtLeast_Phone_V8_0)?UriQuirksVersion.V3:UriQuirksVersion.V2;内部静态boolShouldUseLegacyV2Quirks{get{返回s_QuirksVersion<=UriQuirksVersion.V2;令人困惑的文档说EscapeDataString的输出取决于是否启用IRI/IDN解析,而源代码说输出由Targets_AtV4_Desk的值决定好吧,这似乎自相矛盾。有人可以解决这个问题吗?与4.0相比,4.5在系统功能及其行为方面发生了很多变化。你可以看看这篇文章为什么Uri.EscapeDataString在我的CI服务器上返回与我的开发机器不同的结果?或者您可以直接访问以下链接http://msdn.microsoft.com/en-us/library/hh367887(v=vs.110).aspx所有这些都来自世界各地的用户。以上就是C#学习教程的全部内容:Uri.EscapeDataString很奇怪。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
