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

问题描述 投票:1回答:2

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

cross-platform newline communication text-editor
2个回答
-1
投票

不要统一,只是像Git一样在各种环境中适应它。

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


0
投票

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

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

早期的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也将掉在脸上。

© www.soinside.com 2019 - 2024. All rights reserved.