如何在不同平台上处理换行符

时间:2013-06-19 13:25:05

标签: cross-platform newline communication text-editor

我有一个Linux系统和Windows系统相互发送文本,每个人都用接收到的文本更新文本文件,现在我有一个问题,当文本包含LF / CR char时,我需要统一换行符我们两个发送的char,我试图只使用\ n(在发送字符串之前用空字符串替换\ r \ n)但它不起作用,是否有针对此问题的已知解决方案?

2 个答案:

答案 0 :(得分:0)

不要统一,只是在每个环境中适应它,就像Git那样。

从Windows发送到Linux时用\ n“LF”替换\ r \ n“CRLF”,反之亦然,从Linux发送到Windows时将\ n转换为\ r \ n。

答案 1 :(得分:-1)

  

如何在不同平台上处理换行符

这取决于平台和标准,但是我发现的最佳经验法则是: 在阅读过程中都将其全部处理;并根据标准或主机平台约定编写。

电子邮件,隐私增强电子邮件(PEM),Telnet等早期RFC使用'\r\n'也称为Windows行尾。因此,所有Unix,OS X和Linux系统都应该能够处理它们。

某些RFC表示以特定格式编写。在这种情况下,您可以按照标准进行操作。例如,Telnet和电子邮件RFC表示软件将写入'\r\n'。作为另一个示例,SSH文件格式RFC表示以主机的格式写入。因此,Windows上的软件写'\r\n',Linux上写'\n',OS X上写'\r'

在没有标准的情况下,编写平台的本机格式。 Windows上的软件写'\r\n',Linux上写'\n',OS X上写'\r'。而且由于您的经验法则-读取所有格式-接收软件应该能够解析它。

我知道您不信任某些标准库和运行时,因此您可能需要编写自己的readline函数,该函数贪婪地匹配\r\n。可悲的是,Linux上的C ++运行时就是这种情况。在Linux上的C ++程序中,C ++运行时将其视为一行,而不是两行:Hello\rWorld\n。如果您搜索\r$,Grep也会掉在脸上。