【问题标题】:How to display the character "\0" in C#如何在C#中显示字符“\0”
【发布时间】:2019-07-20 19:51:42
【问题描述】:

这个问题很简单;如果我有以下字符串:

string str = "\0test";

如何在 WinForms 的标签中显示字符“\0”,它似乎会切断“\0”之后的所有字符,或者更一般地在控制台输出中,它似乎插入空格而不是“\0”?

Console.WriteLine(str);
label.Text = str;

【问题讨论】:

标签: c# winforms


【解决方案1】:

要显示所有字符串,您应该在其前面加上 @:

string str = @"\0test";

有关逐字字符串的更多信息,请查看此问题What's the @ in front of a string in C#?

【讨论】:

  • 如果不明显,问题中的字符串与此答案中的字符串不同:"\0test" != @"\0test"。特别是,问题是指字符"\0",它确实是一个字符。 @"\0" 是两个字符。
  • 是的,但他只需要显示那个字符串,我回答了如何
  • 没关系。我只是向未来的读者澄清,这是对错误问题的正确答案。如果这是答案,提问者应该重写问题。
【解决方案2】:

C# ASCII reference

\0 字符终止一个字符串并且不应该是可打印的,因为它用于终止一个字符串。

让我们将\0 替换为° 作为终止符号。示例字符串:

  1. abcd°
  2. ab°cd°
  3. °abcd°
  4. °°

注意:系统会自动终止字符串,因此所有字符串都以° 结尾。 所以,如果你要打印其中任何一个,你会得到:

  1. abcd
  2. ab
  3. (空格为必填,代表空)
  4. (空格为必填,代表空)

因为系统在终止符号第一次出现时终止。

【讨论】:

  • The \0 character terminate a string 你确定吗? This answer 似乎与你的说法相矛盾。
  • ASCII 符号(索引为 0)用作终止符号。因此它没有(默认)表示。他们是否使用它取决于实现 - 我将澄清 C# 不使用它 - 但它也没有以任何有意义的方式打印它。
【解决方案3】:

您要求显示“不可打印”的字符。字体通常没有这些字形,并且在适当的情况下,渲染器将 TAB、LF 和 CR 解释为定位而不是字形。

一种方法是用Control Picture 字符替换它们。

String str = "\0test";
var controlCharacters = new Regex(@"([\u0000-\u001F])");
String displayStr = controlCharacters.Replace(str, m => ((Char)(m.Groups[1].Value[0] + '\u2400')).ToString());

// ␀test

您可能仍会遇到用户字体不支持这些字符的问题。 (有些浏览器也不支持,所以可能很难看懂我在说什么。)

【讨论】:

    【解决方案4】:

    双反斜杠:

    string str = "\\0test";
    

    字符串str 现在包含\0test

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      相关资源
      最近更新 更多