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