filesystem/path_encodings.rb
tests/_examples/filesystem/path_encodings.rb in the metorex repository.
require "tmpdir"
# The pieces of a path, and the paths the system answers for one, are
# written in the encoding the path was given in.
path = "/ledgers/2024/summary.txt".encode(Encoding::EUC_JP)
p File.extname(path).encoding
p File.split(path).map(&:encoding)
Dir.mktmpdir do |directory|
File.write(File.join(directory, "rates.txt"), "1")
named = File.join(directory, "rates.txt").encode(Encoding::EUC_JP)
p File.realpath(named).encoding
p Dir.glob(File.join(directory, "*.txt").encode(Encoding::EUC_JP)).map(&:encoding)
# A path that cannot be written in the encoding asked for keeps its bytes,
# labeled with that encoding, for `realpath`, and keeps its own encoding
# for `realdirpath`.
inner = File.join(directory, "rates_あ")
Dir.mkdir(inner)
p File.realpath(".".encode(Encoding::ISO_8859_1), inner).encoding
p File.realdirpath(".".encode(Encoding::ISO_8859_1), inner).encoding
end
# A positional flag beside a `flags:` keyword is not read.
p Dir.glob("*.none", :ignored, flags: File::FNM_DOTMATCH)
begin
Dir.glob("*.none", :ignored)
rescue TypeError => problem
p problem.message
end
Output:
#<Encoding:EUC-JP>
[#<Encoding:EUC-JP>, #<Encoding:EUC-JP>]
#<Encoding:EUC-JP>
[#<Encoding:EUC-JP>]
#<Encoding:ISO-8859-1>
#<Encoding:UTF-8>
[]
"no implicit conversion of Symbol into Integer"