【问题标题】:Rails send_data throws "invalid byte sequence in UTF-8"... but why?Rails send_data 抛出“UTF-8 中的无效字节序列”......但为什么呢?
【发布时间】:2010-07-06 07:16:06
【问题描述】:

我正在使用 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)。将其更改为以:type =&gt; text/html 发送“foobar”使其工作,因此pdfdata 肯定有问题。

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

谢谢

【问题讨论】:

  • 您使用的是哪个版本的 ruby​​? send_file 有效吗?你也试过 disposition => inline 吗?

标签: ruby-on-rails utf-8


【解决方案1】:

Rails 采用 UTF-8。明确地告诉它它是二进制数据可以解决问题。感谢您的帮助。

pdfdata.force_encoding('BINARY')

【讨论】:

    【解决方案2】:

    你检查过变量 pdfdata 是否正确吗?

    【讨论】:

    • 嗯,它肯定包含终端输出或 vim 无法正确表示的字符,但这是意料之中的,对吧?这是一个 PDF 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2014-09-10
    • 2012-01-12
    • 2012-04-20
    相关资源
    最近更新 更多