Как отмечают другие, на самом деле нет ответа на это: имена файлов и пути не имеют кодировки; ОС работает только с последовательностью байтов. Отдельные приложения могут по своему усмотрению интерпретировать их как кодируемые, но это варьируется.
В частности, Glib (используется приложениями Gtk +) предполагает, что все имена файлов имеют кодировку UTF-8, независимо от языкового стандарта пользователя . Это может быть переопределено переменными среды G_FILENAME_ENCODING и G_BROKEN_FILENAMES .
С другой стороны, Qt по умолчанию предполагает, что все имена файлов закодированы в локали текущего пользователя . Отдельное приложение может предпочесть переопределить это предположение, хотя я не знаю ни одного из них, и нет внешнего переключателя переопределения.
Современные дистрибутивы Linux настроены таким образом, что все пользователи используют локали UTF-8, а пути на монтировках сторонних файловых систем переводятся в UTF-8, поэтому это различие в стратегиях обычно не имеет никакого эффекта. Однако, если вы действительно хотите быть в безопасности, вы не можете предполагать какую-либо структуру имен файлов, кроме «последовательности байтов с разделителями NUL,« / ».
(Также обратите внимание: локаль может отличаться в зависимости от процесса. Два разных процесса, запускаемых одним и тем же пользователем, могут находиться в разных локалях просто из-за установки разных переменных среды.)