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

时间:2010-07-06 07:16:06

标签: 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"

PDF正确生成,但Rails从send_data方法中抱怨ArgumentError (invalid byte sequence in UTF-8)。更改它以发送“foobar”作为:type => text/html使它工作,所以它肯定遇到pdfdata的问题。

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

由于

2 个答案:

答案 0 :(得分:11)

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

pdfdata.force_encoding('BINARY')

答案 1 :(得分:0)

您是否检查过变量pdfdata并检查它是否正确?