🍣
[Bug #21561] Windows 環境で File 関連のメソッドの戻り地のエンコーディングが一貫していないバグ報告
[Bug #21561] Wrong encoding for File.dirname result on Windows
- Windows 環境で非 ASCII 文字を含む
à_signalerディレクトリの配下でファイル関連のメソッドを呼び出したときに戻り値の文字列のエンコーディングが UTF-8 ではなくてUS-ASCIIになるというバグ報告
def dirname_encoding(file)
h = {
"file" => file,
"File.dirname(file)" => File.dirname(file),
"File.expand_path(file)" => File.expand_path(file),
"File.expand_path(File.dirname(file))" => File.expand_path(File.dirname(file)),
"File.dirname(File.expand_path(file))" => File.dirname(File.expand_path(file)),
}
puts
h.each do |name, value|
puts "#{name} = #{value.inspect} (#{value.encoding})"
end
end
dirname_encoding "foo.bar"
dirname_encoding "foo/bar"
file = "foo.bar" (UTF-8)
File.dirname(file) = "." (US-ASCII)
File.expand_path(file) = "D:/à_signaler/foo.bar" (UTF-8)
File.expand_path(File.dirname(file)) = "D:/\xE0_signaler" (US-ASCII)
File.dirname(File.expand_path(file)) = "D:/à_signaler" (UTF-8)
file = "foo/bar" (UTF-8)
File.dirname(file) = "foo" (UTF-8)
File.expand_path(file) = "D:/à_signaler/foo/bar" (UTF-8)
File.expand_path(File.dirname(file)) = "D:/à_signaler/foo" (UTF-8)
File.dirname(File.expand_path(file)) = "D:/à_signaler/foo" (UTF-8)
- 上記だと
File.dirname("foo.bar")やFile.expand_path(File.dirname("foo.bar"))がUS-ASCIIになっている - これは
.がUS-ASCIIとして判定されているのが原因みたい - エンコーディングが異なるよりも一貫している方がよいということで開発版の Ruby 3.5-dev では修正済み
Discussion