2

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

4

2 回答 2

-1

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

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

于 2013-06-19T14:14:23.837 回答
-1

如何跨不同平台处理换行符

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

早期的 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. 如果您搜索 .Grep 也将落在它的脸上\r$

于 2019-10-20T13:24:13.533 回答