我有一堆pdf / txt / msg文件我试图在ruby控制台中下载并移动到本地目录或重新上传到另一个目的地。
首先,我一直在尝试读取文件并将其写入本地目录,如下所示:
path = File.join 'temp', doc_name
file = File.new(path, 'w')
file << Document.find(123).fetch_file // this function retrieves and decrypts the file from s3
我得到的例外是:Encoding :: UndefinedConversionError:&#34; \ xB5&#34;从ASCII-8BIT到UTF-8
我想知道如何在文件写入时获得正确的编码,以便我可以下载并打开它。看起来它应该是微不足道的,答案可能是在解密或s3调用中,但这似乎与文件写入有关。
答案 0 :(得分:3)
您需要以二进制文件打开文件才能获得正确的编码。
file = File.new(path, 'wb')
像这样检查编码
puts file.encoding
它应该是'ASCII-8BIT'。 对你的解密文件内容做同样的事情,它应该是相同的编码,否则你需要像这样转换它。
Document.find(123).fetch_file.force_encoding('ASCII-8BIT')
您还可以使用File.binread(file)
和File.binwrite(file, content)