我有一个Linux系统,而Windows系统互相发送文本,并且每个系统都使用接收到的文本更新文本文件,现在当文本包含LF / CR字符时出现问题,我需要统一换行字符由他们两个发送,我尝试仅使用\ n(在发送字符串之前用空字符串替换\ r),但是它不起作用,是否存在针对此问题的已知解决方案?
不要统一,只是像Git一样在各种环境中适应它。
[从Windows发送到Linux时,将\ r \ n“ CRLF”替换为\ n“ LF”,反之亦然,当从Linux发送到Windows时,将\ n转换为\ r \ n。
如何在不同平台上处理换行符
这取决于平台和标准,但是我发现的最佳经验法则是:在阅读过程中所有这些;并根据标准或主机平台约定编写。
早期的RFC,例如电子邮件,增强隐私的电子邮件(PEM),Telnet等,都使用'\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也将掉在脸上。