两个 Linux 机器之间的 ascii 模式 ftp 进行不需要的 CRLF 转换

两个 Linux 机器之间的 ascii 模式 ftp 进行不需要的 CRLF 转换

使用 FTP 命令,我将一个 xml 文件从一台位于欧洲的 Red Hat Enterprise Linux 机器传输到另一台位于美国的 RHEL 机器。我没有指定传输模式,因此它默认为 ASCII,据我所知,它不应该在两台 Linux 机器之间转换字符,但它确实转换了。文件大小在目标位置增大,vim 将其报告为 DOS 文件。我在两台机器上都检查了 LANG=en_US.UTF-8。

有人知道为什么会发生这种角色翻译吗?

答案1

这正是 ASCII 模式所做的。它翻译行尾。

如果您不想这样,只需切换到二进制模式,该模式会按原样传输数据而不进行任何转换。

如今,你几乎不再需要 ASCII 模式。尤其是对于 XML 文件。

答案2

RFC 959表示以 ASCII 模式发送时,发送方必须以带有 CRLF 行尾的“标准格式”发送文件,并且“接收方将把数据从标准格式转换为其自己的内部格式。”(参见第 3.1.1.1 节“ASCII 类型”。)

因此,在您的情况下,发送方发送了带有 CRLF 行尾的文件,因为 FTP 协议要求这样做,而接收方由于某种原因保留了它们。

我发现以下页面,默认情况下,Red Hat Enterprise Linux 3 和 4 中的 FTP 服务器假装允许 ASCII 模式,但无论如何都会执行二进制传输:当 Red Hat Enterprise Linux 3 和 4 中的 FTP 客户端已设置 ASCII 模式时,为什么 vsftp FTP 服务器无法以 ASCII 模式传输文件?

这也许可以解释为什么它保留了 CRLF 行尾。

相关内容