0

重複の可能性:
C# 文字列値をエスケープされた文字列リテラルに変換できますか

任意の文字列を実体化して、デバッガーと同様の正確な人間が読めるビューを取得するにはどうすればよいですか? つまり、すべての特殊文字をエンティティ化したい:

"Hello,\r\nworld"
"Hello,#D$#A$world"
"Hello,0x0D0x0Aworld"

そのような出力は問題ありません。私は BCL の標準関数 (既存のシリアライザーやヘルパー クラスのエスケープ ルーチンなど) にのみ関心があります。リバース機能もクールだろう。

4

2 に答える 2

1

あなたのニーズにすぐに使えるソリューションがあるとは思いません。 Char.Isxxx特別な処理が必要な文字を見つけるために使用でき、カスタム コードを使用して、表示したい情報に置き換えることができます。

以下のコードはサンプルとしては問題なく動作しますが、すべてのケースを確実にカバーするには、Unicode には多くの異なる文字があります。

var s = @"Hello,
world";

var builder = new StringBuilder();

foreach (var c in s)
{
    if (Char.IsLetterOrDigit(c) || Char.IsPunctuation(c))
        builder.Append(c);
    else
    {
        var newStr = string.Format("#{0}$", ((int)c).ToString("X"));
        builder.Append(newStr);
    }
}
Console.WriteLine(builder.ToString());

コンソールに表示される結果:

Hello,#D$#A$world
于 2012-06-10T13:09:56.430 に答える
0

一連のString.Replacesを使用できます。

string Entitize(string input)
{
    return input.Replace("\n", "\\n").Replace("\r", "\\r"), ... ;

}
于 2012-06-10T10:48:30.907 に答える