Como observado por outros, não há realmente uma resposta para isso: nomes de arquivos e caminhos não têm uma codificação; o sistema operacional lida apenas com a sequência de bytes. Aplicativos individuais podem optar por interpretá-los como sendo codificados de alguma forma, mas isso varia.
Especificamente, o Glib (usado pelos aplicativos Gtk +) pressupõe que todos os nomes de arquivos sejam codificados em UTF-8, independentemente do local 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 todos os nomes de arquivos codificados no código do idioma do usuário atual . Um aplicativo individual pode optar por substituir essa suposição, embora eu não conheça nenhum deles, e não haja uma opção de substituição externa.
As distribuições modernas do Linux são configuradas de modo que todos os usuários estejam usando localidades UTF-8 e os caminhos em montagens de sistemas de arquivos estrangeiros sejam traduzidos para UTF-8, portanto, essa diferença nas estratégias geralmente não tem efeito. No entanto, se você realmente quer estar seguro, não pode assumir nenhuma estrutura sobre nomes de arquivos além de "seqüência de bytes delimitada por N / terminada em N / '/'".
(Observe também: o código do idioma pode variar de acordo com o processo. Dois processos diferentes executados pelo mesmo usuário podem estar em códigos de idioma diferentes, simplesmente configurando diferentes variáveis de ambiente.)