TL;DR
我如何在File.write上指定編碼模式,或者如何以類似方式將影像二進制保存到檔案中?
更多細節
<我試圖從 Trello 卡片中下載一張圖片,然后將該圖片上傳到 S3,以便它有一個可訪問的 URL。我已經能夠從 Trello 中下載二進制圖片(我相信它是某種形式的二進制),但我一直在使用 File.write 將其保存為 .jpeg 的問題。
Encoding::UndefinedConversionError: "xFF"/span>從ASCII-8BIT到UTF-8
從/app/app/services/customer_order_status_notifier/card.rb:181:in `write'
而這里是觸發的代碼:
def trello_pics
@trello_pics ||=
card.attachments.last(config_pics_number)&.map(&:url).map do |url
binary = Faraday. get(url, nil, {'Authorization' => "OAuth oauth_consumer_key="#{ENV['TRELLO_PUBLIC_KEY']}" 。oauth_token="#{ENV['TRELLO_TOKEN']}""})。) 體
File.write(FILE_LOCATION, binary) # doesn't work[/span
run_me
end
end end
所以我想這一定是File.write將輸入轉換為檔案的方式有問題。有什么方法可以指定編碼嗎?
uj5u.com熱心網友回復:
AFIK你不能在執行write的時候做,但是你可以在創建File物件的時候做;這里有一個UTF8編碼的例子:
File.open(FILE_LOCATION, "w:UTF-8") do
|f|
f.write(....)
結束
另一種可能性是使用external_encoding選項:
File.open(FILE_LOCATION, "w"/span>, external_encoding: Encoding::UTF_8)
當然,這是假設被寫入的資料是一個字串。如果你有(打包的)二進制資料,你將使用"wb"來打開檔案,并且使用syswrite而不是write來將資料寫入檔案。
UPDATE正如 engineersmnky 在評論中指出的,編碼的引數也可以作為引數傳遞給 write 方法本身,例如
IO::write(FILE_LOCATION, data_to_write, external_encoding: Encoding::UTF_8)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/307012.html
標籤:
上一篇:我可以一次性將其轉換為長度嗎?
