转义字符出现问题

4

我有一个字符串变量,它包含以下文本:

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

当我尝试将其添加到TextBox控件时,没有任何反应。因为\0表示结束。
我该如何按原样添加文本?
更新: 文本是动态放置在变量中的。因此,@不适用。

1
你想在文本框中看到什么? - SLaks
这个:\0#«Ия\0ьw7к\b\0E\0њI\0\0ЂЪ\n - user348173
6个回答

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

或者

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

文本会动态地放置在变量中。 - user348173
1
给出一些代码上下文。如何获取具有这些字符的字符串?我们可以重现它吗? - xcud
1
@user348173:这段文本来自哪里? - Powerlord
这是文本中十六进制数据的翻译。可能会有无用的内容(如上所述)和正常文本。 - user348173
啊,你想将二进制数据转换为其等效ASCII符号的字符串。 - xcud

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", "");

4

好的,我不知道你的文本来自哪里,但如果必要的话,你可以使用

using System.Text.RegularExpressions;

...

string escapedText = RegEx.Escape(originalText);

然而,如果时间不够充裕,该字符串将包含空字符。

2

它包含以下文本:

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

不是的。那是调试器告诉你它包含的内容。调试器自动将内容格式化,就好像你在源代码中直接写入了它。字符串实际上不包含反斜杠,它们是调试器格式化程序添加的。

该字符串实际上包含二进制零。您可以使用string.ToCharArray()查看这一点。您无法直接显示此字符串,必须摆脱其中的零。例如,以十六进制显示内容可能有效,BitConverter.ToString(byte[])可以帮助实现这一点。


1

不行。
标准的Windows控件无法显示空字符。

如果您想显示文字 "\0",请将该字符串以 "@" 符号开头,这告诉编译器不要解析转义序列。(例如:@\0#«Ия\0ьw7к\b\0E\0њI\0\0ЂЪ\n"

如果您想尽可能多地显示该字符串,则可以去掉空字符,像这样:

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

你也可以用转义码来替换它们:

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

0

你可以尝试在\0中转义反斜杠,即\\0。请参阅此MSDN参考以获取完整的C#转义序列列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接