实体化任意 .NET 字符串

本文关键字:字符串 NET 任意 实体化 | 更新日期: 2023-09-27 18:36:38

可能的重复项:
是否可以将 C# 字符串值转换为转义字符串文本

如何对任意字符串进行实体化以获得类似于调试器所执行的精确人类可读视图? 即我希望所有特殊字符都实体化:

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

任何这样的输出都可以。我只对 BCL 中的标准函数感兴趣(也许是现有序列化程序或帮助程序类中的一些转义例程,等等)。反向功能也会很酷。

实体化任意 .NET 字符串

我认为没有开箱即用的解决方案可以满足您的需求。 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

您可以使用一系列String.Replace

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