如何在XML(UTF-8)中嵌入上传的二进制文件(ASCII-8BIT)?

Kri*_*ris 4 ruby ruby-on-rails-3

我有一个通过常规上传的文件form_for,这给了我一个ActionDispatch::Http::UploadedFileparams哈希的对象,我可以调用它.read来获取内容.我现在需要将该文件嵌入XML文档中.我现在使用常规的Ruby字符串来构造XML.Rails字符串的默认编码是utf-8.

因此,我得到的错误Encoding::UndefinedConversionError,"\x89" from ASCII-8BIT to UTF-8.

对于以下文件会发生这种情况:

what-matters-now-1.pdf: application/octet-stream; charset=binary
example.csv: text/plain; charset=utf-8
investigations.png: image/png; charset=binary

它不会发生:

my_test.txt: text/plain; charset=us-ascii

我试过改变编码,但是我得到了同样的错误:

params[:file].read.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

bab*_*ttz 14

在尝试打开和写入图片时,我遇到了同样的问题(错误).在添加"wb"作为open方法的权限后,它成功了.早些时候,它是"w"