response.write编码错误

Jan*_*Jan 2 c# encoding response.write c#-4.0

我在Web应用程序中有一个字符串字符串是这样的:

`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Run Code Online (Sandbox Code Playgroud)

编码后(通过使用Server.Encode()),它显示以下内容:

`1234567890-=[]\\ ;&#39;,./\\~!@#$%^&amp;*()_+{}|:&quot;&lt;&gt;?|
Run Code Online (Sandbox Code Playgroud)

哪个是对的

但是,当我使用Response.Write(theSecondExample)结果时是这样的:

`1234567890-=[]\ ;&#39;,./\~!@#$%^&amp;*()_+{}|:&quot;&lt;&gt;?|
Run Code Online (Sandbox Code Playgroud)

反斜杠丢失了!

怎么可能输出不符合我的预期?我该怎样预防呢?

And*_*tan 5

没有错误 - 您正在验证调试器中的字符串,它会自动转义字符串 - 例如,"Hello \ Goodbye"将在调试器中显示为"Hello \\ Goodbye".

也就是说,调试器的行为取决于您查看字符串的方式(当然还有C#/ VB):

  • 将鼠标悬停在一个字符串(最常见)上,您将在工具提示中获得转义版本
  • Watch window/Locals等也显示转义版本
  • 如果选择"文本"可视化器,您将看到未转义的版本 - 这是您应该如何实际验证字符串.
  • Html可视化器完全按照它在锡上所说的:)

更新

好的,所以我已经走得更远了并且激发了VS2010,请创建一个测试项目并按照它完成.

[TestMethod]
public void TestMethod1()
{
  string a = @"`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:""<>?|";
  Console.WriteLine("Original:");
  Console.WriteLine("{0}", a);
  string htmlEncoded = System.Web.HttpUtility.HtmlEncode(a);
  Console.WriteLine("Html Encoded:");
  Console.WriteLine("{0}", htmlEncoded);
}
Run Code Online (Sandbox Code Playgroud)

(显然我最初使用了一个逐字字符串,以避免除了双引号之外的任何转义).

控制台输出的测试是:

Original:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Html Encoded:
`1234567890-=[]\ ;&#39;,./\~!@#$%^&amp;*()_+{}|:&quot;&lt;&gt;?|
Run Code Online (Sandbox Code Playgroud)

同样,如果您断点测试结束并开始与可视化工具混淆:

悬停(a):

"`1234567890-=[]\\ ;',./\\~!@#$%^&*()_+{}|:\"<>?|"
Run Code Online (Sandbox Code Playgroud)

即它在工具提示中被C#转义并被引号括起来.

悬停(htmlEncoded):

"`1234567890-=[]\\ ;&#39;,./\\~!@#$%^&amp;*()_+{}|:&quot;&lt;&gt;?|"
Run Code Online (Sandbox Code Playgroud)

..再次,它是html编码 C#转义与引号

文字(htmlEncoded):

`1234567890-=[]\ ;&#39;,./\~!@#$%^&amp;*()_+{}|:&quot;&lt;&gt;?|
Run Code Online (Sandbox Code Playgroud)

..没有c#逃避

Html(htmlEncoded):

`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Run Code Online (Sandbox Code Playgroud)

在Times New Roman剧本当然:)

我相信我们会把我们带回原来的字符串 - 这也表明你所描述的场景不是这样的 - 除非你已经读过一个转义字符串为"正确",而事实上它并非如此.Html不需要\转义.

  • html可视化工具给出了预期的结果.但是html中的结果没有.我猜这是别的.也许JS代码用于显示文本. (2认同)