ConfigurationManager.AppSettings преобразовывает "\ n" в "\\ n", почему? - PullRequest
6 голосов
/ 02 марта 2012

У меня есть AppSetting в web.config .

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

Когда я читаю это ConfigurationManager.AppSettings["key"], это дает "\\ n | \\ r" Почему?

Ответы [ 4 ]

3 голосов
/ 02 марта 2012

В отладчике, поскольку обратный слеш является специальным символом, используемым для таких вещей, как табуляции (\ t) и окончания строк (\ n), он должен быть экранирован с помощью другого обратного слэша. Следовательно, любой текст, который содержит фактический \ будет отображаться как \. Если вы распечатаете его в файл или используете его любым другим способом, вы обнаружите, что ваша строка содержит только одну.

Это не ConfigurationManager ничего не делает.

2 голосов
/ 06 марта 2013

Синтаксис с обратной косой чертой распознается только внутри строковых литералов компилятором C #. Поскольку ваша строка читается из XML-файла во время выполнения, вам нужно использовать XML-совместимое экранирование (символьные объекты), чтобы включить эти символы в вашу строку. Таким образом, запись настроек вашего приложения должна выглядеть следующим образом:

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

Поскольку 10 и 13 - шестнадцатеричные значения для перевода строки и возврата каретки, соответственно.

Как сказал cjk, дополнительная косая черта вставляется отладчиком, чтобы показать, что он видит литерал косую черту, а не escape-последовательность.

1 голос
/ 08 июня 2012

Я решил ту же проблему с заменой строки .
Не красавица .. но работает!

ConfigurationManager.AppSettings["Key"].Replace("\\n", "\n")
0 голосов
/ 02 марта 2012
string str = "\n";// means \n
string str1 = @"\n";// means \\n

Из AppSettings кажется, что когда вы извлекаете значение ключа, @ внутренне оборачивается .. Это выполняется компилятором, а не во время выполнения.

...