Rails send_data抛出"UTF-8中的无效字节序列"......但为什么呢?

doc*_*nge 11 ruby-on-rails utf-8

我正在使用Rails生成带有可执行文件wkhtmltopdf的PDF,然后使用send_data将结果作为PDF文件发送回用户.

 view = ActionView::Base.new(ActionController::Base.view_paths,  {})
 html = "<h1>A heading</h1>"
 pdfdata = `echo '#{html}' | #{RAILS_ROOT}/lib/pdf/wkhtmltopdf-i386 - -`
 send_data pdfdata, :filename => 'readthis.pdf', :disposition => 'attachment', :type => "application/pdf"
Run Code Online (Sandbox Code Playgroud)

PDF生成正确,但Rails ArgumentError (invalid byte sequence in UTF-8)从send_data方法抱怨.更改它以发送"foobar" :type => text/html使其工作,所以它肯定有问题pdfdata.

我不明白.是不是send_data应该发送二进制数据?当然它不是有效的UTF-8.或者我错过了什么?

谢谢

doc*_*nge 12

Rails假定为UTF-8.明确告诉它是二进制数据解决了这个问题.谢谢你的帮助.

pdfdata.force_encoding('BINARY')
Run Code Online (Sandbox Code Playgroud)