您应该在什么基础上select通过FTP进行ACSII或二进制传输?

FTP客户端(包括那些以编程方式使用的)允许用户在上传文件时selectASCII或二进制传输。 一些客户端也支持Auto的一些风格,在那里你把它留给FTP客户端来决定。

select其中一种格式的正确理由是什么? 如何决定? 除了支持自动检测的客户端,如何自动化这个决定?

Windows使用carrige返回和换行来显示文本文件中行的结尾。 Unix通常只使用一个(我认为是一个换行符)。 当你把ftp文件作为文本时,ftp程序会为你换行结尾。 在二进制模式下,文件按照原样传输。 所以,如果你正在传输一个文本文件,然后使用ASCII。 其他任何东西和二进制可能是你最好的select。 正如其他人指出的那样,大多数现代文本编辑器都会处理行结尾(记事本不是,也不是现代:)),所以二进制是更安全的select。 我也同意@njsf,我不喜欢背后的文件被改变。 如果有必要的话,我有编辑能够做一个查找和replace来修复行结尾。

在这个时代,大多数文本编辑器会自动检测并适应unix / dos / mac行结尾,我发现使用ASCII ftp传输的理由很less。 我总是使用二进制。

我不喜欢将这些文件改为封面。

我实际上倾向于使用scp现在比ftp多,scp只是复制这些位…

始终使用二进制。 如果需要的 ,手动转换 – 更可能不需要。

ASCII模式只是在不同服从的系统之间进行线端转换。 现在这绝对没有意义。 大多数编辑都会适应,XMLparsing器大多忽略它们,在编译.c文件或在Unix上运行具有MS-DOS行结尾的sh文件时,您只会遇到问题 – 但这通常只是因为错误的ASCII模式传输。

只要对ASCII模式说不。 现代的FTP客户端将默认为BINARY。

就个人而言,我倾向于使用二进制的每一个转让。 我被一个文件从一台Windows机器上的一个unix机器上用二进制传输的方式蜇了一次。 结果txt文件仍然有CR LF结尾。

ASCI模式查看源和目标平台,并执行行结束转换,所以我得到的结果文件有CR CR LF行尾(LF由ASCI翻译为CR LF,因为它是unix – > windows)

听起来很小 – 但它是一个20Gb的日志文件,我只有一个时间窗口来收集它。

如果必要,我在本地机器上使用eol转换utils。

编辑:我正在从Unix主机的文件回到窗口

请注意,通过使用文本(不是真正的ASCII)模式,因为它们不使用字符集,因此可以将文本传输到某些系统。 例如,IBM大型机和类似系统上的EBCDIC。

只要两个系统使用相同的基本字符集,二进制可能不太麻烦。

了解Windows和Unix在文本文件中对新行进行编码的方式 ,以及二进制和ASCII传输模式之间的区别是什么,可以让您自己回答这个问题。