转义字符问题

时间:2010-11-01 14:30:50

标签: c# escaping

我有一个字符串变量。它包含文字:

\0#«Ия\0ьw7к\b\0E\0њI\0\0ЂЪ\n

当我尝试将其添加到TextBox控件时,没有任何反应。因为\ 0表示END。

如何按原样添加文字?

更新: 文本被动态地放在变量中。因此,@不适合。

6 个答案:

答案 0 :(得分:6)

"\\0#«Ия\\0ьw7к\\b\\0E\\0њI\\0\\0ЂЪ\\n"

@"\0#«Ия\0ьw7к\b\0E\0њI\0\0ЂЪ\n"

答案 1 :(得分:6)

您是否希望显示反斜杠?如果是这样,反斜杠将需要在原始字符串中。

如果您从字符串文字中获取该文本,则只需将其设为verbatim string literal

string text = @"\0#«Ия\0ьw7к\b\0E\0њI\0\0ЂЪ\n";

如果想要传入真正包含Unicode“nul”字符(U + 0000)的字符串,那么您将无法让Windows显示该字符串。您应该首先删除这些字符:

textBox.Text = value.Replace("\0", "");

答案 2 :(得分:4)

好吧,我不知道你的文字来自哪里,但如果必须,你可以使用

using System.Text.RegularExpressions;

...

string escapedText = RegEx.Escape(originalText);

但是,如果不够快,字符串将包含空字符。

答案 3 :(得分:2)

  

它包含文字:

     

\ 0#«Ия\0ьw7к\ B \ 0E \0њI\ 0 \0ЂЪ\ n

不,不。这就是调试器告诉你它包含的内容。调试器自动格式化内容,就像您在源代码中将其写为文字值一样。该字符串实际上不包含反斜杠,它们是由调试器格式化程序添加的。

该字符串实际上包含二进制零。您可以使用string.ToCharArray()自行查看。你不能按原样显示这个字符串,你必须摆脱零。以十六进制显示内容可能有用,例如,BitConverter.ToString(byte [])有助于此。

答案 4 :(得分:1)

你不能。
标准Windows控件无法显示空字符。

如果您尝试显示文字文本\0,请将字符串更改为以@符号开头,告知编译器不要解析转义序列。 (@\0#«Ия\0ьw7к\b\0E\0њI\0\0ЂЪ\n"

如果要尽可能多地显示字符串,可以删除空值,如下所示:

textBox.Text = someString.Replace("\0", "");

您也可以使用转义码替换它们:

textBox.Text = someString.Replace("\0", @"\0");

答案 5 :(得分:0)

您可以尝试转义\0中的反斜杠,即\\0。有关C#转义序列的完整列表,请参阅this MSDN reference