文章目录
- 区别
- 原理分析
- 建议
- 常规作法
- 习惯作法
区别
ASCII 模式和 Binary 模式的区别是换行符的处理,Binary 模式不对数据进行任何处理,ASCII 模式将换行符转换为目标主机操作系统的换行符,换行符号在Unix下是\n(0A),Windows下是\r\n(0D0A),Mac下是\r(0D)。
原理分析
当在一个 Windows 操作系统上用 ASCII 方式从 Unix 服务器上下载文件时,无论是文本文件还是二进制文件(字节码文件/可执行文件/压缩文件等),都会进行检测和转换:每检测到一个 0A(\n),则认为是换行符号,就会自动插入 0D(\r)形成 Windows 下的换行符。
显然,如果下载的是文本文件,这种转换是很有用的,下载后我们能在 Windows 下看到分行正常的文本内容,否则我们看到的是中间夹杂着小黑方块的不换行的一堆文字;然而如果下载的是二进制文件,这种转换无异于画蛇添足,破坏了整个文件。
建议
- 服务器(远程主机)和客户端(本地主机)的 OS 不相同
对于 ASCII 文件(文本文件)采用 ASCII 模式下载和上传,对于 Binary 文件(非文本文件)则采用 Binary 模式下载和上传;
- 服务器(远程主机)和客户端(本地主机)的 OS 相同
任何一种传输模式都可以
常规作法
一般来说,我们最好都用 Binary 模式来传输资源,这样可以保证不出错。如果有文本格式转换的问题,即unix格式的文本和dos格式的文本之间的转换,有很多工具可以做的,不要在ftp传输的时候冒险,尤其是你如果对这些东西不是非常清楚的话。
习惯作法
在 Windows下编辑的文件(dos 格式)可以先转换成 Unix 格式的文件,然后使用 FTP 的 Binary 模式上传到远程的 Unix 主机上。
例如,你可以使用工具 UltraEdit 的 Conversion 功能,也可以使用 UltraEdit 打开或编辑后另存为 Unix Terminators-LF 的格式。
文件格式转换工具:dos2unix、UltraEdit
这样处理的好处:
- 换行符自己控制,灵活清晰;
- 不用 ASCII 模式转换,传输速度也快。