在字符串中显示不可打印字符的方法

本文关键字:打印 字符 方法 字符串 显示 | 更新日期: 2023-09-27 18:01:05

有哪些选项可用于将C#字符串中的所有字符(包括不可打印或空白字符(如换行符、制表符等((显示为字符串?

这样做可以使字符串以允许日志查看器查看这些字符的方式注销。

例如,给定字符串:

你好那里再一次

我可以尝试使用"很少使用"的可打印字符,这样结果会看起来像这样:

hello¶there¶·again

或者我可以使用一个我知道不会出现在字符串中的标识符,比如反斜杠:

hello'rthere'r'tagain

我曾考虑过使用类似Regex.ReplaceString.Replace的东西,但如果不手动指定要映射的每个字符,我就无法"映射"所有空白/不可打印的字符。这真的是最好的选择吗?

在字符串中显示不可打印字符的方法

一旦定义了要查看的字符,就可以循环使用这些字符,并用等效的数字替换每个不可打印的字符。类似于:

var sb = new StringBuilder();
foreach (char c in s)
{
    if (32 <= c && c <= 126)
    {
        sb.Append(c);
    }
    else
    {
        sb.AppendFormat("{{{0}}}", (int)c);
    }
}
Console.WriteLine(sb.ToString());

或者更短的一行,尽管我不知道这是否会像大字符串上的StringBuilder一样好:

// There might be a better LINQ query, but this works:
var result = string.Join(string.Empty, 
    s.Select(c => (32 <= c && c <= 126) 
        ? c.ToString() 
        : string.Format("{{{0}}}", (int)c))
     .ToArray()
);

不管你做什么,都要记住如果替换的字符/字符串实际上是原始字符串的一部分会发生什么。例如,如果{711}实际上在源字符串中,那么目标字符串将无法区分占位符和原始字符。