2012-03-02 20 views
5

Ho un AppSetting in web.config.ConfigurationManager.AppSettings converte " n" in "\ n" perché?

<add key="key" value="\n|\r"/> 

quando l'ho letto da ConfigurationManager.AppSettings["key"]"\\ n | \\ r". Perché?

+0

La tua domanda non corrisponde correttamente al tuo titolo ... – cjk

+0

@cjk: perché pensi? per favore leggi attentamente la domanda. –

+0

Lo hai aggiornato ora. Nel debugger vedi '\\ n | \\ r'? – cjk

risposta

3

Nel debugger, perché il backslash è un carattere speciale utilizzato per elementi come tab (\ t) e terminazioni di riga (\ n), deve essere sfuggito utilizzando un'altra barra rovesciata. Quindi qualsiasi testo che contiene un \ reale verrà visualizzato come \. Se lo stampi su un file o lo usi in qualsiasi altro modo, troverai che la tua stringa contiene solo quella.

Questo non è il ConfigurationManager che fa qualcosa.

0
string str = "\n";// means \n 
string str1 = @"\n";// means \\n 

Dalle AppSettings, sembra che quando si estrae il valore della chiave, @ è avvolto internamente .. E 'fatto dal compilatore non runtime.

1

Ho risolto lo stesso problema con una sostituzione di stringa .
Non bello ... ma funziona!

ConfigurationManager.AppSettings["Key"].Replace("\\n", "\n") 
+0

grazie salvato la mia giornata // –

1

La sintassi di backslash escape è riconosciuta solo all'interno di stringhe letterali dal compilatore C#. Poiché la stringa viene letta da un file XML in fase di runtime, è necessario utilizzare l'escaping compatibile con XML (entità carattere) per includere quei caratteri nella stringa. Così, la voce impostazioni dell'applicazione dovrebbe apparire come il seguente:

<add key="key" value="&x10;|&x13;"/> 

Perché 10 e 13 sono i valori esadecimali per avanzamento riga e ritorno a capo, rispettivamente.

Come ha detto cjk, la barra in più viene inserita dal debugger per indicare che sta visualizzando una barra letterale e non una sequenza di escape.