2012-03-02 1 views
5

У меня есть AppSetting в web.config.ConfigurationManager.AppSettings конвертировать « n» в «\ n» почему?

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

Когда я прочитал его ConfigurationManager.AppSettings["key"] дает "\\ п | \\ г". Почему?

+0

Ваш вопрос не соответствует вашему названию должным образом ... – cjk

+0

@cjk: почему вы так думаете? внимательно прочитайте. –

+0

Вы обновили его сейчас. Это в отладчике вы видите '\\ n \\ r'? – cjk

ответ

3

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

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

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

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

1

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

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

спасибо, спасли мой день // –

1

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

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

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

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

Смежные вопросы