2012-03-02 10 views
5

私はのWeb.configにAppSettingを持っています。ConfigurationManager.AppSettingsは " n"を "\ n"に変換します。なぜですか?

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

私はConfigurationManager.AppSettings["key"]ことによってそれを読んだとき、それはを与える "\\ n個| \\ R"。 なぜですか?

+0

あなたの質問があなたのタイトルと正しく一致していません... – cjk

+0

@cjk:なぜそう思うのですか?質問をよくお読みください。 –

+0

これを今更新しました。あなたは '\\ n | \\ r'を見ているデバッガにありますか? – cjk

答えて

3

デバッガでは、バックスラッシュはタブ(\ t)や行末(\ n)などの特殊文字であるため、別のバックスラッシュを使用してエスケープする必要があります。したがって、実際の\を含むテキストは\として表示されます。ファイルに印刷したり、他の方法で使用すると、文字列には文字列のみが含まれています。

これは何かを行うConfigurationManagerではありません。 AppSettingsから

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

は、実行時ではない、コンパイラによって行われます..あなたは、キーの値を抽出する際、@が内部的に包まれているようです。

1

私は同じ問題を文字列置換で解決しました。
美しくはありませんが、機能します!

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

ありがとうございました。 –

1

バックスラッシュのエスケープ構文は、C#コンパイラによって文字列リテラル内でのみ認識されます。実行時にあなたの文字列がXMLファイルから読み込まれているので、文字列にそれらの文字を含めるには、XML互換エスケープ(文字エンティティ)を使用する必要があります。このように、アプリの設定項目は、次のようになります。

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

ため、10と13はそれぞれ、改行やキャリッジリターン用の六角値です。

cjkと同様に、スラッシュがのリテラルスラッシュで、エスケープシーケンスではないことを示すためにデバッガによって挿入されています。

関連する問題