FTP 客户端,包括那些以编程方式使用的客户端,允许用户在上传文件时选择 ASCII 或二进制传输。一些客户端还支持某种 Auto,您将其留给 FTP 客户端来决定。
选择一种格式而不是另一种格式的正确理由是什么?一个人如何决定?除了支持自动检测的客户端外,如何自动执行此决策?
FTP 客户端,包括那些以编程方式使用的客户端,允许用户在上传文件时选择 ASCII 或二进制传输。一些客户端还支持某种 Auto,您将其留给 FTP 客户端来决定。
选择一种格式而不是另一种格式的正确理由是什么?一个人如何决定?除了支持自动检测的客户端外,如何自动执行此决策?
Windows 使用回车符和换行符来显示文本文件中的行尾。Unix 通常只使用一个(我认为是换行)。当您将文件作为文本 ftp 时,ftp 程序将为您转换行尾。在二进制模式下,文件完全按原样传输。因此,如果您要传输文本文档,请使用 ASCII。其他任何东西和二进制可能是你最好的选择。正如其他人指出的那样,大多数现代文本编辑器无论如何都会处理行尾(记事本没有,也不是现代的:))所以二进制是迄今为止更安全的选择。我也同意@njsf,我不喜欢在我背后更改文件。如果有必要,我的编辑器非常有能力进行查找和替换以修复行尾。
在这个时代,大多数文本编辑器自动检测并适应 unix/dos/mac 行尾,我发现使用 ASCII ftp 传输的理由很少。我总是使用二进制。
我不喜欢在幕后更改文件。
实际上,我现在更倾向于使用 scp 而不是 ftp,而 scp 只是复制位...
始终使用二进制。如果需要,手动进行转换- 更有可能永远不需要。
ASCII 模式只是在不同服从的系统之间进行行端转换。现在完全没有意义。大多数编辑器都会适应,XML 解析器大多会忽略它们,您只会在尝试编译 .c 文件或在具有 MS-DOS 行尾的 Unix 上运行 sh 文件时遇到问题——但这通常只是因为错误的 ASCII 模式传输而发生.
只是对 ASCII 模式说不。无论如何,现代 FTP 客户端将默认为 BINARY。
就个人而言,我倾向于在每次传输中使用二进制文件。我曾经被一个使用二进制传输从 Windows 机器放置到 unix 机器上的文件所困扰。结果,txt 文件仍然有 CR LF 结尾。
ASCI 模式查看源和目标平台并执行行尾转换,因此我得到的结果文件有 CR CR LF 行尾(LF 由 ASCI 转换为 CR LF,因为它是 unix -> windows)
听起来很琐碎——但它是一个 20Gb 的日志文件,我只有一个时间窗口来收集它。
如果有必要,我会在本地机器上使用 eol 转换工具。
编辑:我正在将文件从 unix 主机返回到 Windows
请注意,使用文本(不是真正的 ASCII)模式可以加快将文本传输到某些系统的速度,因为它们不使用字符集。例如,IBM 大型机和类似系统上的 EBCDIC。
只要两个系统都使用相同的基本字符集,二进制可能就不那么麻烦了。
了解Windows 和 Unix 在文本文件中编码新行的方式是什么,以及二进制和 ASCII 传输模式有什么区别,让您自己回答这个问题。