首页 > 解决方案 > 在存在文字“\”+“n”的情况下转义换行符

问题描述

在我的应用程序的设置文件中,每一行都采用name=value的形式(例如:color=red)。名称由应用程序确定,而值是用户键入的文本。

由于文件格式每行需要一个设置,如果用户的值包含换行符(“\n”,ASCII 10),则会出现问题:这将导致解析器崩溃(或允许他们插入虚假的name=value名称无效的记录)。但是,我确实希望用户能够使用这个字符,所以我需要以某种方式对其进行转义:例如,s = s.Replace("\n", "\\n");

但是,用户也可以键入两个字符序列“\”+“n”。所以假设我有任意讨厌的字符串,比如"ABC\n\\n\\\\n\n\\\nXYZ"(其中有两个换行符和两个文字 "\" + "n" 序列)。什么算法可以安全地(i)转义字符串,以确保它不包含换行符,然后(ii)反转过程以恢复原始字符串?

标签: c#escapingnewline

解决方案


如果您只想处理'\n',以下方法将起作用:

string Parse(string input)
{
    return input.Replace("\\","\\\\").Replace("\n","\\n");
}

string ParseBack(string input)
{
    string output="";
    for(int i=0; i < input.Length; i++)
    {
        if(input[i]=='\\')
        {
            i++;
            if(input[i]=='n')
            {
                output += '\n';
            }
            else 
            {
                output += input[i];
            }
        }
        else
        {
            output += input[i];
        }
    }
    return output;
}

输入:

ABC 
\n\\n 
\ 
XYZ

解析:

ABC\n\\n\\\\n\n\\\nXYZ

解析回:

ABC 
\n\\n 
\ 
XYZ

推荐阅读