2013-11-15 28 views
5

Something parantezi ama enUri.EscapeUriString garip soru

I (VS 2013 .NET 4.5.1) bir konsol uygulaması kod Eğer alır yanıt tür ... bakalım ve bu satırı yürütmek Ben (aynı şeyi yürütmek Ancak

[

: kodun:

Uri.EscapeUriString("[")

Ben bu olsun kuyu, teknik olarak Uri.EscapeUriString("[").Dump()) benim makinede LINQPad içinde bu alın:

%5B

ayrıca, şeyleri zorlaştırmak için according to this postUri.EscapeUriString("[") gerçekten %5B hayranlarıyla sonrası 27/06/2012 tarihinde yazılmış dönmelidir.

Belki de LINQPad'in VS tarafından kullanılandan daha eski bir DLL'ye başvurduğunu düşünüyorum, ancak bu, EscapeUriString'un nispeten yakın zamanda değiştiğini ve bunun hiçbir kayıt bulamadığını ima eder. Bu davranışa neyin sebep olabileceği konusunda herhangi bir fikri var mı?

+0

WT? 4.5.1’de tekrarlayabilirim! –

cevap

5

.Net 4 ve .Net 4.5 arasında değiştirildi. Bu, framework sürümünü .Net 4'e yeniden hedefleyerek ve test programını çalıştırarak doğrulayabilirsiniz.

Net 4 -> çıkış "% 5B" (veya üstü) .net 4.5 -> çıkışları "["

Bu burada söz edilir: bölümünde Application Compatibility in the .NET Framework 4.5

Uri.EscapeDataString için (.Net 4.5 ile birlikte) belirten Uri.EscapeUriString ve Uri.UnescapeDataString:

ayrılmış ve koşulsuz karakterlerin listesi şimdi RFC 3986 destekler.

Özgül değişiklikler: Özellikle

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. 

, bu EscapeUriString önemli olan ayrılmış karakterler kaçış yok olduğunu.

2

Yeni davranış, RFC 2396'a göre doğru olanı gibi görünüyor. hat 566 yılında belirtir: Uri.EscapeUriString 'ın belgelerinde

566. Other characters are excluded because gateways and other transport 
567. agents are known to sometimes modify such characters, or they are 
568. used as delimiters. 
569. 
570. unwise  = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`" 

o

Varsayılan olarak

, EscapeUriString yöntemi kendi onaltılık temsil RFC 2396 ayrılmamış karakterleri dışında tüm karakterleri dönüştürür belirten

Öyleyse, .NET 4.0'a kadar olan ve 4.5.1

+0

Yanlış. .NET 4'e kadar.0, RFC 2396 doğru şekilde takip edilir. Kaçtı olmayan karakterler, 460 değil, 570'de listelenir. Dot Net 4.5.1 aslında farklı olan RFC 3986'nın aynı bölümünde listelenen karakterleri izler. –