filesystem/opening_encodings_and_paths.rb
tests/_examples/filesystem/opening_encodings_and_paths.rb in the metorex repository.
# A mode naming `-` as the internal encoding, or the external one again,
# names no internal encoding, and a block given to File.open with a Pathname
# answers what the block does, as Bundler reads its lockfile.
require "pathname"
require "tmpdir"
Dir.mktmpdir do |directory|
path = File.join(directory, "rates.txt")
File.write(path, "# -*- coding: utf-8 -*-\nnorth 12\n")
File.open(path, "r:UTF-8:-") { |file| p([file.external_encoding, file.internal_encoding, file.readline]) }
File.open(path, "r:UTF-8:utf-8") { |file| p([file.external_encoding, file.internal_encoding]) }
listed = Pathname.new(path)
p(File.open(listed, "r:UTF-8", &:read))
p(File.open(listed) { |file| file.readlines.size })
end
Output:
[#<Encoding:UTF-8>, nil, "# -*- coding: utf-8 -*-\n"]
[#<Encoding:UTF-8>, nil]
"# -*- coding: utf-8 -*-\nnorth 12\n"
2