ftp命令 binary mode與ascii mode的區別
FTP可用多種格式傳輸檔案,通常由系統決定,大多數系統(包括UNIX系統)只有兩種模式:文字模式和二進位制模式。文字傳輸器使用ASCII字元,並由Enter鍵和換行符分開,而二進位制不用轉換或格式化就可傳字元,二進位制模式比文字模式更快,並且可以傳輸所有ASCII值,所以系統管理員一般將FTP設定成二進位制模式。
一般來說: 如果你用錯誤的模式傳輸你的圖片,你將會無法看到圖片,看到的會是亂碼。 如果你用錯誤模式上傳CGI指令碼,那麼就將無法執行你的指令碼,會看到類似Server 500 Error的出錯資訊。
所以你必須使用正確的模式,圖片和執行檔案必須用BINARY模式,CGI指令碼和普通HTML檔案用ASCII模式上傳.
ASCII 和BINARY模式區別:
用HTML 和文字編寫的檔案必須用ASCII模式上傳,用BINARY模式上傳會破壞檔案,導致檔案執行出錯。
BINARY模式用來傳送可執行檔案,壓縮檔案,和圖片檔案。
如果你用ASCII模式傳,會顯示一堆亂碼,你必須重新用BINARY模式傳。
對於第二種情況,是因為有很多ftp和客戶端軟體能自動識別檔案型別,並採取相應的傳輸方式。
ftp是應用層,和具體作業系統無關 .
ASCII 模式和BINARY模式的區別是回車換行的處理,binary模式不對資料進行任何處理,asci模式將回車換行轉換為本機的回車字元,比如Unix下是\n,下是\r\n,Mac下是\r
ascii模式下會轉換檔案
不能說是不同系統對回車換行解釋不同
而是不同的系統有不同的行結束符
unix系統下行結束符是一個位元組,即十六進位制的0A
而ms的系統是兩個位元組,即十六進位制的0D0A
所以當你用ascii方式從unix的ftp server檔案時(不管是二進位制或者文字檔案),每檢測到一個位元組是0A,就會自動插入一個0D,所以如果你的檔案是二進位制檔案比如可執行檔案、壓縮包什麼的,就肯定不能用了。如果你的檔案就是unix下的文字檔案,你用 ascii模式是正確的,要是誤用了binary模式,你在windows上看這個檔案是沒有換行的,裡面是一個個的黑方塊。
一般來說,我們最好都用binary方式,這樣可以保證不出錯。如果有文字格式轉換的問題,即unix格式
的文字和dos格式的文字之間的轉換,有很多工具可以做的,不要在ftp傳輸的時候冒險,尤其是你如果對這些東西不是非常清楚的話。
可以使用MIME,把所有的字元,轉換成0~128之間的字元,然後傳送,在接受方再將接收到的字元MIME反向轉換。通常我們傳送郵件,就是使用這樣的字元轉換方式
------------------------------------------------------------------
補充:文字模式和二進位制模式傳文字檔案的具體區別可以透過在下使用“cat -A 檔名”看到兩者的區別,當然前提是在windows下上傳的文字為dos格式,這個可以用高階的文字編輯器看如UltraEdit等。兩者的區別是二進位制模式上傳的文字比文字模式多一個^M符號,這個就是windows下dos格式的/r回車符號,也就是上面提到的十六進位制的0D,在vi下使用全域性替換:%s/^M//g[^M使用Ctrl+V+M而不是直接輸入^M]去掉所有的回車符或者使用dos2unix file進行轉換,這樣儲存後或者生成後的檔案就和文字模式上傳的檔案一樣了。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2139327/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Vue的mode中 hash 與 history 的區別Vue
- 501-Find Mode in Binary Search Tree
- chmod命令(change mode)
- [LeetCode] 501. Find Mode in Binary Search TreeLeetCode
- LeetCode 501. Find Mode in Binary Search TreeLeetCode
- Go 1.18:工作區模式workspace modeGo模式
- javascript strict modeJavaScript
- IDBTransaction.mode
- Docker Swarm modeDockerSwarm
- MySQL的sql_mode解析與設定MySql
- UFS之Power Mode
- ORACLE LOCK MODE 1.2.3.4.5.6Oracle
- MySQL Strict SQL MODEMySql
- emacs go-modeMacGo
- 【Java】The Java Headless ModeJava
- ANSI 與 ASCII 的區別,編碼老問題ASCII
- webcodecs mix-blend-modeWeb
- 3.3.4 Shutting Down with the Transactional Mode
- Docker Swarm Mode簡介DockerSwarm
- Bash 設定 vi mode
- LPDDR4 byte mode
- FTP和TFTP的區別與介紹FTP
- binary和varbinary的區別
- Android Media Framework(五)Tunnel ModeAndroidFramework
- MySQL的sql_mode合理設定MySql
- 迷之自信的Single_User Mode
- 模擬mode=4 and name='TX'的enqueueENQ
- MySQL 的 sql_mode 合理設定MySql
- Shader 中的顏色混合模式(Blend Mode)模式
- Unity Texture Setting 中 Filter Mode的影響UnityFilter
- webpack4 Mode的預設設定Web
- How to debug release mode program in visual studio
- CSS3 animation-fill-modeCSSS3
- 3.2.3 Opening a Database in Read-Only ModeDatabase
- maven “Generating project in Batch mode“問題的解決MavenProjectBAT
- OGG Integrated Mode(downstream方式)環境搭建
- swarm mode叢集之service分組Swarm
- 什麼是 Angular Ivy Partial compilation modeAngular
- Install VMware Tools in CentOS 7 command line modeCentOS