如何将 StringIO (pdf) 数据保存到文件中
how to save StringIO (pdf) data into file
我想用 ruby 保存位于外部远程服务器中的 pdf
文件。 pdf
文件即将在 StringIO
中发布。我尝试使用 File.write
保存数据,但它不起作用。我收到以下错误。
ArgumentError: string contains null byte
现在如何保存?
require 'stringio'
sio = StringIO.new("he\x00llo")
File.open('data.txt', 'w') do |f|
f.puts(sio.read)
end
$ cat data.txt
hello
回复评论:
好的,试试这个:
require 'stringio'
sio = StringIO.new("\c2\xb5")
sio.set_encoding('ASCII-8BIT') #Apparently, this is what you have.
File.open('data.txt', 'w:utf-8') do |f|
f.puts(sio.read)
end
--output:--
1.rb:7:in `write': "\xB5" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
要消除该错误,您可以将 StringIO 的编码设置为 UTF-8:
require 'stringio'
sio = StringIO.new("\c2\xb5")
sio.set_encoding('ASCII-8BIT') #Apparently, this is what you have.
sio.set_encoding('UTF-8') #Change the encoding to what it should be.
File.open('data.txt', 'w:UTF-8') do |f|
f.puts(sio.read)
end
或者,您可以使用 File.open 模式:
require 'stringio'
sio = StringIO.new("\c2\xb5")
sio.set_encoding('ASCII-8BIT') #Apparently, this is what you have.
File.open('data.txt', 'w:UTF-8:ASCII-8BIT') do |f|
f.puts(sio.read)
end
但是,这假设数据是用 UTF-8 编码的。如果您实际上有二进制数据,即未编码的数据,例如,因为它表示 .jpg 文件,那将不起作用。
我想用 ruby 保存位于外部远程服务器中的 pdf
文件。 pdf
文件即将在 StringIO
中发布。我尝试使用 File.write
保存数据,但它不起作用。我收到以下错误。
ArgumentError: string contains null byte
现在如何保存?
require 'stringio'
sio = StringIO.new("he\x00llo")
File.open('data.txt', 'w') do |f|
f.puts(sio.read)
end
$ cat data.txt
hello
回复评论:
好的,试试这个:
require 'stringio'
sio = StringIO.new("\c2\xb5")
sio.set_encoding('ASCII-8BIT') #Apparently, this is what you have.
File.open('data.txt', 'w:utf-8') do |f|
f.puts(sio.read)
end
--output:--
1.rb:7:in `write': "\xB5" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
要消除该错误,您可以将 StringIO 的编码设置为 UTF-8:
require 'stringio'
sio = StringIO.new("\c2\xb5")
sio.set_encoding('ASCII-8BIT') #Apparently, this is what you have.
sio.set_encoding('UTF-8') #Change the encoding to what it should be.
File.open('data.txt', 'w:UTF-8') do |f|
f.puts(sio.read)
end
或者,您可以使用 File.open 模式:
require 'stringio'
sio = StringIO.new("\c2\xb5")
sio.set_encoding('ASCII-8BIT') #Apparently, this is what you have.
File.open('data.txt', 'w:UTF-8:ASCII-8BIT') do |f|
f.puts(sio.read)
end
但是,这假设数据是用 UTF-8 编码的。如果您实际上有二进制数据,即未编码的数据,例如,因为它表示 .jpg 文件,那将不起作用。