2016-03-21 2 views
5

Perché la decodifica url non riceve un errore quando decodifica% 22. Questa è una doppia citazione. Quando un programmatore inserisce sinteticamente una virgoletta doppia in una stringa, deve utilizzare due virgolette doppie "" per rappresentare una virgoletta doppia.Qual è la logica dietro il decodificatore url quando si utilizzano le virgolette doppie?

Per esempio

string myString = "It\"s nice to meet you"; 
console.write(myString); 

uscita

It "s piacere di conoscerti

Ma quando url decodifica un virgolette perché essa si rompe. Dopo che la stringa viene fatta passare attraverso il decodificatore url c'è solo una virgola ". Perché questo non infrange il codice?

Per esempio

string myString = "It%22s nice to meet you"; 
myString = HttpUtility.UrlDecode(myString); 
console.Write(myString); 

uscita

It "s piacere di conoscerti

+1

Le stringhe sono sicuramente in grado di gestire "È bello conoscerti." Il requisito per evitare le virgolette è * solo * quando il testo è codificato nel codice. Esiste perché dice al compilatore se stai terminando * la stringa *, o * in realtà volendo scrivere una citazione *. – Rob

risposta

4

La necessità di evitare le virgolette è solo una preoccupazione per le stringhe letterali in C#. La lingua è definita in questo modo. Non letterali non sono interessati: ((char)35).ToString() == "\"" è vero.

Questo non ha alcun impatto sui valori di runtime effettivi. "\"".Length è 1. Il CLR non è a conoscenza dell'escaping.

Il CLR è in grado di ospitare molti linguaggi di programmazione. Non si preoccupa delle regole di fuga di una singola lingua.

Le funzioni di libreria non possono nemmeno indicare come è stata scritta o calcolata una stringa. Anche se volessero.

1

I risultati sono gli stessi Sono solo diverse rappresentazioni di una doppia citazione -. A seconda di come lo decodifichi

// All the same: 
string myString1 = @"It""s nice to meet you"; // string simplification 
string myString2 = "It\"s nice to meet you"; // escaping a double quote 
string myString3 = HttpUtility.UrlDecode("It%22s nice to meet you"); 
+0

quindi sono tutti uguali alla fine. È bello conoscerti perché la stringa nell'esempio decodificato non viene inserita letteralmente. Non ha bisogno delle citazioni di fuga. –

+0

corretto. Ancor più, durante l'esecuzione tutte le variabili fanno riferimento alla stessa posizione nello stack che contiene la stringa "I" è piacevole conoscerti. –