使用 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 行尾。