ASCII,二进制,自动


16

我正在服务器之间传输文件,并且刚开始注意到它们中的一些已被修改为一条连续的长行,而不是像原来那样具有返回和换行符。我假设这与我最初设置为“自动”的FTP客户端的传输类型有关,但是将“二进制”和“ ASCII”作为附加选项使用。

简而言之,我将文件从一台服务器传输到另一台服务器的方式之间有什么区别,这些区别是否能够像我上面提到的那样修改文件?

Windows 转移 Linux。

Answers:


27

FTP的“二进制”传输模式逐字节地精确复制文件。简单明了。

但是,当在不同的操作系统之间放置文本文件时,这可能不是您想要的-不同的操作系统使用不同的代码表示换行符。为此存在“ ASCII”模式:它自动将所有行尾从源系统的格式转换为目标系统的格式。

不确定“自动”,但我想它看起来像是文件的扩展名或类似的内容来确定它是否是文本文件,并尝试猜测适当的模式。

您想要哪种模式取决于您对文件的确切操作...如果您只是复制文件以备份它们,则可能需要以二进制模式复制,因此当它们复制时,它们将完全相同。您以后再将它们还原到Windows服务器。如果双方都需要将它们用作文本文件(也许是跨平台程序的配置文件?),则需要使用ASCII模式来翻译它们。

编辑:据我所知,从Windows向Linux传输文件的FTP绝不应该导致换行符消失... 但是,如果以ASCII模式复制它们,然后以二进制模式将它们带回到 Windows服务器,则Linux Windows框上可能无法识别样式行尾。(记事本看不到它们;写字板将看到; YMMV与其他软件一起。)

(今天,在FTP这样的基本协议中,这种方便的操作-自动转换行尾-看起来很奇怪。但是,当FTP发明时,发送文本文件已成为一种规范,而该协议的目标之一就是这越容易。)


两者都有很好的描述。我现在不那么困惑了。
桑普森

谢谢,我从不理解那种ASCII模式,现在我绝对只会使用二进制模式
Kiwy 2014年

3

确实存在差异,除非您使用二进制选项,否则它们将使您的非纯文本文件传输陷入混乱-通常在可以的情况下始终使用:)


有没有办法恢复它们?还是我现在只需要与Binary进行转移,以免将来再次发生这种情况?
桑普森

我敢肯定您可以取消选择它们,但是可能要花很长时间,因此强烈建议您重新发送它们。
斩波器

1

您要在哪个操作系统上传输文件?Linux / Unix和Windows使用不同的换行符。因此,如果您在Linux计算机上生成文件并在Windows上打开它,则看起来可能很奇怪。有一些实用程序可以纠正此问题,但是根据我的经验,如果您在Windows上使用写字板而不是记事本,就可以了。


我在IDE的Windows上编写这些文件,然后将它们移到linux服务器。稍后,我从linux服务器中打开它们以找到长连续线。
桑普森

尝试跑步dos2unix,看看是否能纠正线条
einstiien

1

Windows和Unix在行尾具有不同的字节(Windows为0D 0A(十六进制),Unix为0A)。在二进制模式下传输文件时,文件的字节将从一台计算机上保持不变。这是二进制格式(例如ZIP文件,图像等)所必需的,但可能导致文本文件出现问题:例如Windows上的notepad.exe将显示文本文件,其中Unix样式的换行符为长行,而Unix编辑器看到Windows样式时,可能会在每行末尾显示^ M。

因此从技术上讲,对于二进制格式(zip,jpg,png和无尽其他),您需要将FTP设置为BINARY,而对于文本格式(HTML,PHP,CGI等),则需要将其设置为ASCII。

大多数优质的FTP程序还具有自动设置,这意味着它们将根据众所周知的文件扩展名来确定模式(BINARY或ASCII),例如,它将自动将JPG文件的传输切换为BINARY并以ASCII格式发送/接收PHP文件模式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.