filesystem/written_encodings.rb

tests/_examples/filesystem/written_encodings.rb in the metorex repository.

# A write puts the bytes the string is made of on the stream, so text outside
# ASCII goes out in the encoding the string carries rather than one byte per
# character.
require "tmpdir"

Dir.mktmpdir do |held|
  path = File.join held, "linea.txt"

  File.open path, "w" do |stream|
    stream.write "línea\n"
  end
  p File.binread(path).bytes
  p File.read(path)

  # A string holding bytes of its own is written as those bytes, whatever
  # they spell.
  raw = "\xC3\xA9".dup.force_encoding "BINARY"
  File.open path, "wb" do |stream|
    stream.write raw
  end
  p File.binread(path).bytes

  # Reading it back through a pipe gives the same bytes, so a separator made
  # of more than one byte is found across what was written.
  reader, writer = IO.pipe
  writer.write "uno·dos·tres"
  writer.close
  p reader.gets("·")
  p reader.read
  reader.close
end

Output:

[108, 195, 173, 110, 101, 97, 10]
"línea\n"
[195, 169]
"uno·"
"dos·tres"