从URL写入文件时,“写”:“\ xCF”从ASCII-8BIT到UTF-8(Encoding :: UndefinedConversionError)

时间:2017-07-14 17:53:28

标签: ruby ruby-on-rails-5 open-uri

我收到错误:

write': "\xCF" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)

来自行:

open(uri) {|url_file| tempfile.write(url_file.read)}

相关代码是:

require 'tempfile'
require 'open-uri'
require 'uri'
..
uri = URI.parse(@download_link)
tempfile = Tempfile.create(file_name)
open(uri) {|url_file| tempfile.write(url_file.read)}`
..

如果我像ruby lib/file.rb那样运行它会完全运行,但是当我在rails环境中运行它时会出错:rails runner lib/file.rb

此错误的大多数问题都涉及gem安装方案。我猜我必须包含/更新一些宝石,但不知道哪个宝石。

3 个答案:

答案 0 :(得分:7)

接受的答案很好,但我认为值得一提的是您还可以在创建/打开Tempfile时设置编码,例如:

Tempfile.new("file.pdf", encoding: 'ascii-8bit') # or 'utf-8'

答案 1 :(得分:6)

使用open(uri) {|url_file| tempfile.write(url_file.read.force_encoding("UTF-8"))

`dataframe %$%
  t.test(vector1, vector2, paired = T)
 dataframe %$%
  cohen.d.(vector1, vector2, paired = T)`

答案 2 :(得分:3)

这应该可以解决问题。

data = URI.parse(@download_link).read
tempfile = Tempfile.create(file_name)
tempfile.binmode # This will help deal encoding problem with download files from the internet
tempfile.write(data)

binmode是二进制模式