我寫了一個簡單的ftp客戶端,它從客戶端下載一些zip文件。對於所有意圖和目的的代碼是這樣的:撤消編碼翻譯
ftp = Net::FTP.new
ftp.connect 'ftp.server.com'
ftp.login 'user', 'pwd'
ftp.binary = true
t = Tempfile.new 'file'
ftp.getbinaryfile('remotefile', nil) {|data| t << data}
t.close
ftp.close
FileUtils.mv t, '/path/to/file'
這當它在Linux機器上運行跑好得很,但是當代碼得到了移動到Windows中的二進制數據開始變得損壞,我在寫入之前必須將tempfile設置爲binmode。
我的問題:有沒有什麼辦法可以「修復」或撤消在當zip文件最初下載和損壞,以獲取這些文件回來,從編碼回二進制基本上會在編碼翻譯?
從Windows的某些其它信息框中的代碼
t = Tempfile.new('file')
t.external_encoding # -> nil
t.internal_encoding # -> nil
Encoding.default_internal # -> nil
Encoding.default_external.name # -> "IBM437"
我認爲你可以重新讀取窗口框上的非二進制模式的文件,並用二進制模式再次寫出它。 – phoet