2012-08-13 45 views
2

我編程一個FTP插件(使用python的ftplib),我想知道如果它應該使用給定文件的二進制或ASCII傳輸方法來確定最佳方式是什麼。換句話說就是「自動」傳輸模式。FTP二進制x ASCII自動選擇

我開始關注這個問題,因爲我得到了關於雙線和谷歌搜索的問題報告,結果發現二元模式應該是負責任的[1] [2]。

它可能使用白名單或黑名單擴展名應該是二進制或ascii,但它可能不會出現,當然這是一個問題,然後使用哪種方法(wl x bl,b x a)。它聽起來不夠穩固(列表不完整,缺乏擴展)。

- >問題:對於給定的文件,選擇二進制還是ASCII傳輸模式有什麼可靠的方法? (如果有的話......)
謝謝

[1] http://www.seo-creative.co.uk/tutorials/ftp-client-giving-you-double-line-breaks/
[2] http://www.chami.com/html-kit/support/docs/pages/h000114.html

回答

1

首先,你需要檢查的BOM marks其識別UTF-16或UTF8文件。如果它們存在,那麼該文件是一個文本文件的概率爲99.9%。

接下來,您可以掃描該文件並檢查它是否包含代碼小於32且不是9,10和13(TAB,LF,CR)的字符。如果文件中沒有這樣的字符,那麼該文件是,可能是的一個文本。但這裏沒有保證,或者用戶可以明確請求文件以二進制模式傳輸。

+0

謝謝。我想避免瀏覽整個文件(不能認爲它們會很小),但現在我用你的BOM方法結合用戶可調整的ascii和二進制擴展白名單 – NoxArt 2012-08-14 10:55:09

+0

然而,我發現ASCII模式有問題 - 轉換一切到ASCII可以打破許多文件。看起來好多了,以二進制方式傳輸所有東西,並用我們自己所需的(通常是操作系統特定的)變體替換EOL – NoxArt 2013-09-08 10:22:02