RuntimeError(无法执行:错误:"\ xFE"从ASCII-8BIT到UTF-8):

Rod*_*odM 8 wicked-pdf ruby-on-rails-3.2

试图使用Wicked PDF.

我在控制器中有这个代码

  def pdf
  pdf = WickedPdf.new.pdf_from_string(
  render_to_string(
  pdf: 'filename.pdf',
  template: '/pages/poa.html.slim',
  layout: '/layouts/pdf'),
  header: {
      content: render_to_string({
          template: '/pdfs/poa_header.html.slim',
          layout: '/layouts/pdf'
      })
  })

   save_path = [Rails.root, '/public/pdf/', 'filename.pdf'].join
   File.open(save_path, 'wb') do |file | file << pdf
   end
   end
Run Code Online (Sandbox Code Playgroud)

我在尝试执行上面的操作时收到此错误消息

RuntimeError (Failed to execute:

Error: "\xFE" from ASCII-8BIT to UTF-8):
Run Code Online (Sandbox Code Playgroud)

我已经尝试清空我正在渲染的模板和布局的内容但仍然出错.

pow*_*ers 12

如果您尝试写入不是二进制模式的文件,则会发生这种情况.

使用'b'标志打开文件File.open(file_path, 'wb'),或者如果您已经有文件句柄,则可以在写入之前将其切换为二进制模式:

f = Tempfile.open(%w(my .pdf))
f.binmode
f << pdf
f.close
Run Code Online (Sandbox Code Playgroud)


Eri*_*man 6

我自己也遇到过这个问题.奇怪的是,只有当我在Rails 4.rc2下运行时才会发生(在Rails 3.2.13下运行正常).我通过强制生成的pdf字符串编码为UTF-8来解决它.

所以在你的例子中,尝试这样的事情:

File.open(save_path, 'wb') do |file | file << pdf.force_encoding("UTF-8")
Run Code Online (Sandbox Code Playgroud)

虽然以上这条线为我解决了问题,但我发现根本问题实际上是在升级到Rails 4.rc2的过程中降级的一些宝石.在强制某些依赖项获得后来的gem版本后,我现在可以在没有#force_encoding的情况下运行,就像之前使用rails 3一样.


小智 0

我使用 WickedPdf.new.pdf_from_string 得到了完全相同的错误。

尝试删除:

WickedPdf.new.pdf_from_string

所以它写道:

pdf = render_from_string( pdf: ....