資源描述:
《ftp中bin和ascii的區(qū)別》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、FTP可用多種格式傳輸文件,通常由系統(tǒng)決定,大多數(shù)系統(tǒng)(包括UNIX系統(tǒng))只有兩種模式:文本模式和二進(jìn)制模式。文本傳輸器使用ASCII字符,并由回車鍵和換行符分開,而二進(jìn)制不用轉(zhuǎn)換或格式化就可傳字符,二進(jìn)制模式比文本模式更快,并且可以傳輸所有ASCII值,所以系統(tǒng)管理員一般將FTP設(shè)置成二進(jìn)制模式。 一般來說:如果你用錯(cuò)誤的模式傳輸你的圖片,你將會(huì)無法看到圖片,看到的會(huì)是亂碼。如果你用錯(cuò)誤模式上傳CGI腳本,那么就將無法運(yùn)行你的腳本,會(huì)看到類似Server500Error的出錯(cuò)信息。 所以你必須使用正確的
2、模式,圖片和執(zhí)行文件必須用BINARY模式,CGI腳本和普通HTML文件用ASCII模式上傳. ASCII和BINARY模式區(qū)別: 用HTML和文本編寫的文件必須用ASCII模式上傳,用BINARY模式上傳會(huì)破壞文件,導(dǎo)致文件執(zhí)行出錯(cuò)?! INARY模式用來傳送可執(zhí)行文件,壓縮文件,和圖片文件?! ∪绻阌肁SCII模式傳,會(huì)顯示一堆亂碼,你必須重新用BINARY模式傳。 對于第二種情況,是因?yàn)橛泻芏鄁tp服務(wù)器和客戶端軟件能自動(dòng)識別文件類型,并采取相應(yīng)的傳輸方式?! tp是應(yīng)用層協(xié)議,和具體操作系
3、統(tǒng)無關(guān). ASCII模式和BINARY模式的區(qū)別是回車換行的處理,binary模式不對數(shù)據(jù)進(jìn)行任何處理,asci模式將回車換行轉(zhuǎn)換為本機(jī)的回車字符,比如Unix下是,Windows下是r,Mac下是r ascii模式下會(huì)轉(zhuǎn)換文件 不能說是不同系統(tǒng)對回車換行解釋不同 而是不同的系統(tǒng)有不同的行結(jié)束符 unix系統(tǒng)下行結(jié)束符是一個(gè)字節(jié),即十六進(jìn)制的0A 而ms的系統(tǒng)是兩個(gè)字節(jié),即十六進(jìn)制的0D0A 所以當(dāng)你用ascii方式從unix的ftpserver下載文件時(shí)(不管是二進(jìn)制或者文本文件)
4、,每檢測到一個(gè) 字節(jié)是0A,就會(huì)自動(dòng)插入一個(gè)0D,所以如果你的文件是二進(jìn)制文件比如可執(zhí)行文件、壓縮包什么的,就肯 定不能用了。如果你的文件就是unix下的文本文件,你用ascii模式是正確的,要是誤用了binary模式, 你在windows上看這個(gè)文件是沒有換行的,里面是一個(gè)個(gè)的黑方塊?! ∫话銇碚f,我們最好都用binary方式,這樣可以保證不出錯(cuò)。如果有文本格式轉(zhuǎn)換的問題,即unix格式 的文本和dos格式的文本之間的轉(zhuǎn)換,有很多工具可以做的,不要在ftp傳輸?shù)臅r(shí)候冒險(xiǎn),尤其是你如果對 這些東西不
5、是非常清楚的話?! 】梢允褂肕IME,把所有的字符,轉(zhuǎn)換成0~128之間的字符,然后傳送,在接受方再將接收到的字符MIME反向轉(zhuǎn)換。通常我們發(fā)送郵件,就是使用這樣的字符轉(zhuǎn)換方式 ------------------------------------------------------------------ 補(bǔ)充:文本模式和二進(jìn)制模式傳文本文件的具體區(qū)別可以通過在linux下使用cat-A文件名看到兩者的區(qū)別,當(dāng)然前提是在windows下上傳的文本為dos格式,這個(gè)可以用高級的文本編輯器看如ultrae
6、dit等。兩者的區(qū)別是二進(jìn)制模式上傳的文本比文本模式多一個(gè)^M符號,這個(gè)就是windows下dos格式的/r回車符號,也就是上面提到的十六進(jìn)制的0D,在vi下使用全局替換:%s/^M//g[^M使用Ctrl+V+M而不是直接輸入^M]去掉所有的回車符或者使用dos2unixfile進(jìn)行轉(zhuǎn)換,這樣保存后或者生成后的文件就和文本模式上傳的文件一樣了。。?! ≡牡刂穐ttp://blog.88743.com/article/DailyBlog/291.htm在計(jì)算機(jī)系統(tǒng)中,不同的系統(tǒng)判斷一行是否結(jié)束的標(biāo)志是不一樣
7、的。文件中的一行可以有三種結(jié)束的方式:1.cr2.nl???---->Unix調(diào)用一個(gè)newline的動(dòng)作3.crlf(orlfcr)ftp上傳的時(shí)候,有bin和ascii兩種區(qū)別使用bin命令傳輸時(shí),什么也不會(huì)改變,按照源文件傳輸,而用ascii方式傳輸時(shí)會(huì)將行結(jié)束符從來源的機(jī)器所用的行結(jié)束符轉(zhuǎn)換成接收機(jī)器所用的行結(jié)束符。例如:ascii可能將一個(gè)cr轉(zhuǎn)換成一個(gè)nl(這通常表示成一個(gè)lf)。而且ascii指示ftp注意文件的結(jié)束符,在pc中表現(xiàn)為:control-z(因此,文件結(jié)束符可以結(jié)束文件的內(nèi)容,但不
8、一定表示文件的物理結(jié)束)所以,如果文件本身是二進(jìn)制的,應(yīng)該完全不變的傳輸,這時(shí)需要使用bin模式而對文本文件而言,就需要轉(zhuǎn)換。否則有可能得到這樣的結(jié)果:thislineends^Mandanotherlineends^Mandweshouldhaveended^Mbutdidnot^Mwhichdoes^Mnotlookgreat.^M^Z這種情況發(fā)生在當(dāng)來源機(jī)器使用lfcr作為行結(jié)束符而lf是接收