-1

使用 Replace 函数时,我注意到在尝试替换值“\r”和/或“\n”时没有预料到的事情。

我在外部 .cs 文件中有以下方法(正在进行中):

public static string UrlEncode(string stringItem)
{
    stringItem = stringItem.Replace("%", "%25").
    Replace("\"", "%22").Replace("#", "%23").
    Replace("\\", "%5C").Replace("&", "%26").
    Replace("'", "%27").Replace("+", "%2B").
    Replace("\r", "").Replace("\n", " ");
    return stringItem;
}

这会产生所需的结果(即,用单个空格替换任何新行)。

所以,如果我用一个“enter-key-press”传入一个字符串,它会存储一个空格。

我不明白的(因此是问题):为什么,如果我只使用“替换('\r','')”或“替换('\n','')”它仍然存储一个新队。我可以理解其中一个不起作用,但为什么我需要同时包含两者?如果 '\r' 或 '\n' 替换方法都不能单独工作,为什么同时使用这两种方法?

我问这个问题是因为在不理解的情况下使用代码(至少对我来说)是一个非常糟糕的习惯。此外,我对我打算使用的代码了解得越多,我就越能在未来根据情况利用它的有用性。

-------------------------另一个特点------------------------ -----

如果我只使用 Replace("\r", " "),它会提供空间(好像替换有效)但不会摆脱新行。

或者,如果我只使用 Replace("\n", " "),它会保留新行,然后提供空间。

----------------------最后一点---------- ----------

如果有任何问题,输出将进入 cshtml 页面上的文本区域。

4

3 回答 3

5

这是因为你的输入数据中包含"\r\n"了(回车+换行)对,这是很常见的,实际上是HTTP标准所要求的(方法名中的“URL”表示这里可能涉及到HTTP)数据。当您查看数据时,渲染器对所有三个行尾(单独、单独和单独)的行为"\r\n""\r"相同"\n"。这是由鲁棒性决定的行为。

于 2013-02-21T18:51:55.523 回答
4

这是因为,虽然有很多可能的新行序列,但 windows(在其他上下文中)常用的一种是\r\n. 看起来这就是您的数据实际包含的新行分隔符。

但是,某些应用程序/环境仅用\r作换行符,而其他应用程序/环境仅使用\n. 因此,许多应用程序已经学会在显示文本时将这三个可能值中的任何一个解释为新行。

如果你 \r用一个空格替换,你最终会得到一个空格\n,如果你的输入最初\r\n是 ,那么它会被解释为一个空格,后跟一个换行符。同样,仅替换\n会导致换行符 ( \r) 后跟一个空格。

于 2013-02-21T18:53:47.723 回答
0

您是否尝试过替换 Environment.NewLine?

str.Replace(Environment.NewLine, " ");
于 2013-02-21T18:49:39.057 回答