`write': "\xCF" 从 ASCII-8BIT 到 UTF-8 (Encoding::UndefinedConversionError) 从 url 写入文件

`write': "\xCF" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) while writing to file from url

我遇到错误:

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 安装方案。我猜我必须 include/update 一些 gem,但不知道是哪个。

使用force_encoding:

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

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

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

这应该可以解决问题。

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为二进制模式