Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1087033
  • 博文数量: 321
  • 博客积分: 7872
  • 博客等级: 少将
  • 技术积分: 2120
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-16 09:06
文章分类

全部博文(321)

文章存档

2017年(1)

2016年(1)

2015年(12)

2014年(17)

2013年(78)

2012年(15)

2011年(17)

2010年(67)

2009年(102)

2008年(11)

分类: LINUX

2014-05-16 15:35:01

最近工作中需要构造些数据(windows),然后上传到服务器(linux)上运行,本来在本地已经设置后用linux的newLine符号(\n)但传到服务器上newLine符却变成了(\r\n),虽然可以用dos2unix,但为什么会把换行符改变呢?找了些资料,发现这和FTP的传输模式有关,如下:

FTP有两种传输模式:BINARY和ASCII

BINARY模式
复制时保留文件的位序,逐位拷贝原始文件而不管内容——即使对目的机器操作系统来说该文件是没意义的。

ASCII模式
复制时候会进行调整,主要体现为对不同操作系统的回车/换行/结束符等进行转译。
比如,回车符号在Unix下是\n(0A),Windows下是\r\n(0D0A),Mac下是\r(0D)。当在一个Windows操作系统上用 ASCII方式从Unix服务器上下载文件时——无论是文本文件还是二进制文件——都会进行检测和转换:每检测到一个0A,则认为是回车符号,自动插入 0D形成Windows下的回车符。显然,如果下载的是文本文件,这种转换是很有用的——我们能在Windows下看到分行后的文本,否则我们看到的是中间夹杂着小黑方块的不换行的一堆文字;然而如果下载的是二进制文件(比如exe或rar),这种转换无异于画蛇添足,破坏了整个文件。(PS:我的FlashFXP设置的是默认,估计就是按文件的特征信息来判断是文本还是二进制,但它向linux传却用了windows的newLine符,可能是个bug吧)

因此,如果服务器和客户端的OS不相同,对于ASCII文件(文本文件)采用ASCII模式下载,对于非文本文件采用BINARY模式下载;如果两端OS相同,两种方式具有同样效果。

如何解决:
有些经常游走在两个OS之间的人员采取的习惯做法是:将在Windows下编辑的文件转换成Unix模式,而FTP默认用BINARY模式传输。(PS:最终我也选择这种模式,好处两点,1newLine符我控制,清晰;2不用ascii方式的转换,速度也快)。

FlashFXP设置:
我的FlashFXP版本是3.4.0,选项 -> 参数设置 -> 传输 -> 传输模式选择“二进制(图像)”


防止被ftp server踢的设置:选项 -> 参数设置 -> 连接 -> 防止被踢 -> 勾选"发送保持活动命令"

转自:
阅读(3925) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~