Ruby中使用File.write时如何指定编码以保存图片二进制文件?
解决方案
这个错误是因为File.write默认使用文本写入模式,会自动尝试将输入内容转换为系统默认编码(通常为UTF-8),而你获取的图片二进制数据编码为ASCII-8BIT,其中包含大量无法转换为UTF-8的字节,因此触发转换错误。
你可以通过以下方式解决:
- 方法1:直接在
File.write参数中指定二进制写入模式,跳过编码转换,修改对应代码行即可:File.write(FILE_LOCATION, binary, mode: 'wb')wb代表二进制写入模式,不会做任何编码转换,直接将原始二进制数据写入文件。 - 方法2:也可以使用标准的文件打开写入写法,显式指定二进制模式:
File.open(FILE_LOCATION, 'wb') do |file| file.write binary end
额外注意:你当前的代码在循环中所有图片都写入同一个FILE_LOCATION路径,会导致前面的图片被覆盖,建议根据url生成唯一文件名,比如使用Digest::MD5.hexdigest(url)作为文件名的一部分,避免覆盖问题。
内容的提问来源于stack exchange,提问作者McKay Whiting
相关产品推荐
相关产品推荐

