字面意思到字符串

时间:2017-01-05 22:15:39

标签: c# .net

我在文件中有一个字符串作为字符串

def s_CalculatePartiallyUsedTechPenalty(rate):\n    total = min(rate,0)\n    title = \"Partially Used Technology Penalty\" \n    return RateItem(title,total,FinancialUniqueCode.PartiallyUsedTechPenalty,False)

在阅读文件时,文字看起来很明显:

def s_CalculatePartiallyUsedTechPenalty(rate):\\n    total = min(rate,0)\\n    title = \\\"Partially Used Technology Penalty\\\" \\n    return RateItem(title,total,FinancialUniqueCode.PartiallyUsedTechPenalty,False)

是否有干净的方法来转换此字符串,以便文件中的值也是代码中字符串的实际值。换句话说,\n例如\n而非\\n

我知道我可以编写一个方法来替换所有适用的值,但我不想这样做,除非它是唯一的方法。

编辑:回应John Wu的回答。不,我不困惑。我确实理解这种情况正在发生但是我想将文字值“\ n”转换为换行符。因此,它应该是一个新行,而不是\ n的字面值。

基本上是How to convert a string containing escape characters to a string

的倒数

2 个答案:

答案 0 :(得分:0)

如果您无法修复文件编写代码,则可以通过以下方式解决此问题:

String.Replace(@"\\\", @"\");
String.Replace(@"\\", @"\");

或者,如果您正常未转义的字符串,

String.Replace(@"\\\""", "\"");
String.Replace(@"\\n", Environment.NewLine);

P.S。还要考虑其他特殊字符,例如\ t

<强>更新:

更好的方法:

class Program
{
    static void Main(string[] args)
    {
        var escaped   = @"def s_CalculatePartiallyUsedTechPenalty(rate):\n    total = min(rate,0)\n    title = \""Partially Used Technology Penalty\"" \n    return RateItem(title,total,FinancialUniqueCode.PartiallyUsedTechPenalty,False)";
        var unescaped = Regex.Unescape(escaped);

        Console.WriteLine(unescaped);
    }
}

答案 1 :(得分:0)

你自己很困惑。文件中保存的字符串与通过读取文件获得的字符串变量中保存的字符串完全相同。

也许您正在使用Visual Studio来检查字符串(即使用Watch窗口或仅在代码处于调试模式时将鼠标悬停在变量上)。在这种情况下,Visual Studio将显示额外的斜杠以指示字符串变量包含文字值“\ n”而不是换行符。

如果要在Watch窗口中删除转义字符,可以将格式说明符,nq附加到变量名称(link)。

另见this question on StackOverflow