Actions
Bug #22194
openFile.realpath and File.realdirpath handle differently path encoding incompatible with a filesystem's one
Bug #22194:
File.realpath and File.realdirpath handle differently path encoding incompatible with a filesystem's one
Description
Both realpath and realdirpath methods accept a path parameter and try to return result in the path's encoding.
realpath:
File.realpath(".rubocop.yml").encoding # => #<Encoding:UTF-8>
File.realpath(".rubocop.yml".encode("US-ASCII")).encoding # => #<Encoding:US-ASCII>
realdirpath:
File.realdirpath("src").encoding # => #<Encoding:UTF-8>
File.realdirpath("src".encode("US-ASCII")).encoding # => #<Encoding:US-ASCII>
But it's possible that path's encoding isn't compatible with the filesystem's one (that's is common to be UTF-8 on Linux and macOS), that's converting from the filesystem's encoding to path's encoding fails.
In this case realpath and realdirpath behaves differently - realpath just "forces" encoding to path's one (and as fallback to filesystem's and then to binary if a string becomes broken) and realdirpath just skips this encoding and returns a string as is in the filesystem's encoding.
realpath:
realdirpath:
It makes sense for the methods to handle this edge case consistently.
Actions