Como observado por outros, não há realmente uma resposta para isso: nomes de arquivos e caminhos não possuem uma codificação; o sistema operacional lida apenas com a seqüência de bytes. Aplicações individuais podem optar por interpretá-las como sendo codificadas de alguma forma, mas isso varia.
Especificamente, Glib (usado pelos aplicativos Gtk +) assume que todos os nomes de arquivos são codificados em UTF-8, independentemente da localidade do usuário . Isso pode ser substituído pelas variáveis de ambiente G_FILENAME_ENCODING e G_BROKEN_FILENAMES .
Por outro lado, o Qt assume como padrão supor que todos os nomes de arquivos estão codificados na localidade do usuário atual . Um aplicativo individual pode optar por substituir essa suposição, embora eu não saiba de nenhum que faça isso e não há uma alternância de substituição externa.
As distribuições Linux modernas são configuradas de tal forma que todos os usuários estão usando locales UTF-8 e os caminhos em montagens de sistemas de arquivos estrangeiros são traduzidos para UTF-8, portanto essa diferença nas estratégias geralmente não tem efeito. No entanto, se você realmente deseja estar seguro, não pode assumir qualquer estrutura sobre nomes de arquivos além da "sequência de bytes delimitada por NUL, '/'".
(Observe também que: locale pode variar de acordo com o processo. Dois processos diferentes executados pelo mesmo usuário podem estar em locais diferentes simplesmente configurando variáveis de ambiente diferentes.)