文件编写时的Ruby编码

时间:2018-01-19 00:53:10

标签: ruby-on-rails ruby

我有一堆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调用中,但这似乎与文件写入有关。

1 个答案:

答案 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)

http://ruby-doc.org/core-2.3.0/IO.html#method-c-binread

http://ruby-doc.org/core-2.3.0/IO.html#method-c-binwrite