撤消编码翻译

时间:2013-06-05 21:30:18

标签: ruby

我写了一个简单的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"

1 个答案:

答案 0 :(得分:1)

我认为数据在保存到文件时会损坏,而不是在下载时。

在Windows上,文本文件行用CR + LF分隔。如果以文本模式打开文件并将CR字节写入其中,CR将自动替换为CR + LF。

Zip文件是二进制文件。使用二进制模式来处理它们。