【问题标题】:(C#) How can I get a string with escape characters without changing the escape characters? [duplicate](C#) 如何在不更改转义字符的情况下获取带有转义字符的字符串? [复制]
【发布时间】:2022-11-04 21:55:30
【问题描述】:

我想将字符串保存到文件中(例如,不将 \n 设置为实际的新行)。

这是我的代码:

using (var fs = new FileStream(path, FileMode.Truncate)
{
    var sw = new StreamWriter(fs);
    List<string> keys = texts.Keys.ToList();
    List<string> vals = texts.Values.ToList();
    for (int i = 0; i < texts.Count; i++)
    {
        sw.WriteLine(keys[i] + ";" + vals[i]);
    }
    sw.Close();
}

如您所见,我正在尝试将名为texts 的字典转换为文件。 在值中,我可以有line1\n\tline2。我需要以某种方式制作,以便转义字符不会转换为它们的实际形式。

我将不胜感激任何帮助...

编辑: 尝试做sw.WriteLine(keys[i].Replace(@"\", "|") + ";" + vals[i].Replace(@"\", "|");。它不会保存为|n|t...

编辑2: 您可以使用这种超大算法将 Literal 转换回其原始形式(不包括所有转义字符)

private static string ToNormal(string value)
    {
        string output = "";
        bool escapeChar = false;
        for (int i = 0; i < value.Length; i++)
        {
            if (escapeChar)
            {
                switch (value[i].ToString())
                {
                    case "n":
                        output += "\n";
                        break;
                    case "t":
                        output += "\t";
                        break;
                    case "a":
                        output += "\a";
                        break;
                    case @"\":
                        output += "\\";
                        break;
                }
                escapeChar = false;
            }
            else if (value[i] == '\\')
            {
                escapeChar = true;
                continue;
            }
            else
            {
                output += value[i];
            }
        }
        return output;
    }

【问题讨论】:

  • 目标是编写 csv 文件吗?如果是这样,您可能并不是真的想转义换行符,而是将所有文本封装在一个单元格中。或者只使用 json 并让库处理一切。

标签: c# file escaping


【解决方案1】:

this question

应该能够在for 循环中执行此操作:

sw.WriteLine(keys[i] + ";" + Microsoft.CodeAnalysis.CSharp.SymbolDisplay.FormatLiteral(vals[i], false));

你必须安装Microsoft.CodeAnalysis.CSharp Nuget 包

【讨论】:

  • 如果问题是重复的,我们不会添加新答案,而是将问题作为重复项关闭。
  • 抱歉,我没有足够的声誉来做这件事,哈哈。
  • @frankM_DN您知道如何将文字形式转换回其原始形式吗?
  • @RadarDev 我没有对此进行严格测试,但看起来你可以使用Regex.Unescape(vals[1])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多