2016-08-05 29 views
0

有什麼選項可以將字符串中包含非打印或空白字符(如換行符,製表符等)的所有字符顯示爲字符串?在字符串中顯示不可打印的字符的方法

這樣做可以使字符串以一種允許日誌查看器查看這些字符的方式註銷。

例如,給定的字符串:

hello 
there 
    again 

...我可以嘗試使用「很少使用」打印字符,這樣結果會是這個樣子:

hello¶there¶·again 

...或者我可以使用一個我知道不會在字符串中預期的標識符,如反斜槓:

hello\rthere\r\tagain 

我想過使用類似Regex.ReplaceString.Replace的東西,但我無法弄清楚如何「映射」所有空白/不可打印字符,而無需手動指定每個我想要映射的字符。這真的是最好的選擇嗎?

+0

順便說一句,這是爲Windows控制檯項目 - 沒有RichTextBox等 –

+0

我會說你的想法可能是最好的方法。沒有必要進一步複雜化,因爲所有你想要做的是用另一個替換一個不可打印的字符,所以只需要替換它。 –

+0

@DanielWaghorn謝謝 - 我很好奇,如果其他人已經處理過這樣的事情,以及什麼解決方案爲他們工作。 –

回答

0

一旦您定義了您想要查看的字符,您可以遍歷字符並用等同數字替換每個不可打印的字符。喜歡的東西:

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}實際上在您的源字符串中,那麼您的目標字符串將無法區分佔位符和原始字符之間的差異。