【问题标题】:String.Replace CRLF with '\n'字符串。将 CRLF 替换为 '\n'
【发布时间】:2026-02-07 19:50:01
【问题描述】:

我想知道是否有办法用“\n”替换所有 CRLF 实例。有没有办法做到这一点?

【问题讨论】:

标签: c# string newline


【解决方案1】:

我认为我似乎一直在尝试以错误的方向替换。

String.Replace('\n', '\r') 

VS

String.Replace('\r', '\n')

现在好像一切正​​常。

【讨论】:

    【解决方案2】:

    您尝试过哪些不起作用的方法? CRLF 表示carriage returnline feed。回车是\r,换行是\n,所以用换行替换CRLF是

    value = value.Replace("\r\n", "\n");
    

    这就像任何其他字符串替换一样。重要的是要注意Replace 是一个返回新字符串的方法,因此您需要将结果分配回某个变量,在大多数情况下,它可能与您已经使用的变量名称相同。

    编辑:根据您在下面的评论,您可能会根据 Notepad++ 的行尾转换设置将 CRLF 误认为 LF。在hex editor 中打开您的文件,看看里面有什么。您将看到 CRLF 为0D 0A(所以回车是0D,换行是0A)。 Notepad++ 会告诉你你想看到什么。通过单击Edit > EOL Conversion > UNIX Format 检查您的行尾转换,即使存在 CRLF,它也会显示 LF 而不是 CRLF。

    【讨论】:

      【解决方案3】:

      如果你真的想用显式字符串“\n”替换回车/换行对,你需要转义反斜杠:

      value = value.Replace("\r\n", "\\n"); 
      

      【讨论】:

      • @Bob 和 ^^^ 我已经尝试过这两种技术。但是当我在记事本中打开文件(查看->显示符号->显示行尾字符)时,我仍然看到 CRLF 符号。所以我猜它没有用。
      • 好的,你正在处理一个文件。您是否使用ReadLineWriteLine 访问该文件?由于他们处理行分隔符,你可能会绊倒自己。
      • 在十六进制编辑器中查看您的文档并在那里进行验证。 Notepad++ 可能会根据您在“编辑 > EOL 转换”下的 EOL 设置来伪造它所看到的内容。如果您选择 Unix 格式,它将显示 LF 而不是 CRLF。
      • user92546,能详细点吗?
      • 我未经检验的理论:您可能正在查看包含嵌入式控制字符的文件,例如使用可视记事本,不喜欢你所看到的。您编写了一个使用ReadLine 读取文件的应用程序,ReadLine 通过检测要删除的控制字符来找到行尾。很有帮助,它不会将这些字符返回到您的应用程序。应用程序尝试修复线路并使用WriteLine 输出结果。为了指示行尾,WriteLine 有助于在您提供的数据的末尾添加一个或两个控制字符。瞧。