有人可以向我解释为什么我的代码:
string messageBody = "abc\n" + stringFromDatabaseProcedure;
其中valueFromDatabaseProcedure不是从
输入的SQL数据库中的值'line1\nline2'
产生字符串:
"abc\nline1\\nline2"
这导致我有点挠头。
我正在使用ASP.NET 1.1。
澄清,
我正在创建字符串,我需要在表单提交的电子邮件正文中。 我提到了ASP.NET 1.1,因为我在控制台应用程序中使用.NET 2.0没有得到相同的结果。
我正在做的就是添加字符串,当我查看messageBody字符串时,我可以看到它已经转义了值字符串。
更新 什么对我没有帮助的是Outlook没有正确显示文本电子邮件中的\ n(除非你回复它)。 在线邮件查看器(甚至是Exchange Webmail)将\ n显示为新行。
答案 0 :(得分:1)
我刚刚对测试NorthwindDb进行了快速测试,并在中间输入了一些\ n的垃圾数据。然后,我使用直接的ADO.NET查询数据,你知道吗,事实上它确实为你自动地避开了反斜杠。它与n无关,它只是看到反斜杠并为你逃脱它。事实上,我也把它放到db:foo“栏中,当它回到C#时它就是foo \”吧,它也为我逃脱了。我的观点是,它试图像SQL一样保留数据,因此它正在逃避它认为需要逃脱的东西。我还没有找到关闭它的设置,但如果我这样做,我会告诉你......
答案 1 :(得分:0)
ASP.NET会使用<br />
来制作换行符。 \n
可用于控制台应用程序或Windows窗体应用程序。您是否将其输出到网页?
方法#1
string value = "line1<br />line2";
string messageBody = "abc<br />" + value;
如果不起作用,请尝试:
string value = "line1<br>line2";
string messageBody = "abc<br>" + value;
方法#2
string value = "line1"+ System.Environment.NewLine + "line2";
string messageBody = "abc" System.Environment.NewLine + value;
其中一种方法可以保证有效。如果您要将字符串输出到网页(或电子邮件或表单提交),则 使用我提到的方式之一。 \n
永远不会在那里工作。
答案 2 :(得分:0)
您需要设置一个监视,并查看数据库结果字符串在何处被双重转义。
将两个字符串一起添加将永远不会使转义字符串加倍,因此它要么在此之前发生,要么在此之后发生。
答案 3 :(得分:0)
当我从数据库中获取字符串时,.NET会自动转义它。但是,小@符号被附加到字符串,我没有注意到。
所以它出现是非逃避到我的“即将去度假”的目标。
因此,当未转义的\ n被添加到字符串中时(因为整个字符串不再被转义),它将删除@并显示字符串转义的数据库部分。
加,这完全是一种错觉。也许这个假期已经过期了。
感谢您的意见。
答案 4 :(得分:0)
如果存储在数据库中的实际字符串是(为了强调而添加的空格):“我是1 \ n l 2 n”,那么存储它的任何内容都可能存在错误。但假设那是确切的字符串,那么“abc \ nline1 \ nline2”字符串就是当你在一个调试器中查看将打印为“abc
line1 \ nline2”的字符串时会发生的事情。是一种方便,允许您直接复制粘贴到调试器中而没有错误)。
简短的回答:.NET没有转义字符串,你的调试器是。将文字“\ n”写入数据库的代码有一个错误。