クライアント サイトからいくつかの zip ファイルをダウンロードする単純な ftp クライアントを作成しました。すべての意図と目的のために、コードは次のようになります。
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 ボックスに移動すると、バイナリ データが破損し始め、書き込む前に一時ファイルを binmode に設定する必要がありました。
私の質問: zip ファイルが最初にダウンロードされて破損したときに行われたエンコード変換を「修正」または元に戻して、それらのファイルを元に戻し、基本的にエンコードからバイナリに戻す方法はありますか?
コードが実行されていた Windows ボックスからの詳細情報
t = Tempfile.new('file')
t.external_encoding # -> nil
t.internal_encoding # -> nil
Encoding.default_internal # -> nil
Encoding.default_external.name # -> "IBM437"