2016-08-05 21 views
0

C#文字列内の印字不可能な文字や空白文字(改行文字、タブなど)を含むすべての文字を文字列として表示するためのオプションはありますか?文字列に印刷できない文字を表示する方法

これは、ログビューアでこれらの文字を見ることができるように文字列をログアウトできるようにするためです。

例えば、文字列を与えられた:

hello¶there¶·again 

:結果は次のようになりますように

hello 
there 
    again 

...私は、「ほとんど使わない」印刷可能な文字を使用しようとする可能性があり...または、おそらく私は文字列にバックスラッシュのように期待されないことがわかっている識別子を使用することができます:

hello\rthere\r\tagain 

私はRegex.ReplaceString.Replaceのようなものを使うことを考えましたが、マッピングする各文字を手動で指定することなく、すべての空白/印字不能文字を「マップ」する方法を理解できません。これは本当に最高の選択肢でしょうか?

+0

ところで、これはWindows Consoleプロジェクト用です。リッチテキストボックスなどはありません。 –

+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}が実際にソース文字列にある場合、ターゲット文字列はプレースホルダと元の文字の違いを示すことができません。

関連する問題