Internamente, a maioria dos bytes de armazenamento de sistemas de arquivos: o driver do sistema de arquivos não se importa com o significado dos bytes. O driver do sistema de arquivos genérico no Linux e na maioria dos outros unices modernos permite que qualquer byte diferente de /
e o byte nulo apareçam em um nome de arquivo.
Existem sistemas de arquivos que podem ter restrições de codificação - geralmente sistemas de arquivos não nativos, como FAT ou NTFS. Alguns sistemas de arquivos de rede, como o Samba, podem traduzir entre a codificação do servidor e a codificação do cliente; você precisará garantir que as configurações do servidor e do cliente sejam coerentes.
Convencionalmente, na maioria dos sistemas, os bytes que compõem um nome de arquivo são interpretados como UTF-8. Se você executar um aplicativo que interprete os nomes de arquivos como caracteres, por exemplo, um aplicativo que transmita os nomes por FTP, talvez seja necessário configurar esse aplicativo para informar que os nomes dos arquivos estão codificados em UTF-8. Configurar o ambiente LC_CTYPE
para uma localidade UTF-8 como en_US.UTF-8
é o truque para muitos aplicativos de linha de comando.
Se você armazenar arquivos em um sistema que não suporta UTF-8, não importa. Os bytes permanecerão os mesmos. Você não poderá exibir os caracteres que compõem os nomes dos arquivos, mas se copiar os arquivos de volta para um sistema que suporte UTF-8, esses mesmos bytes continuarão sendo exibidos como caracteres UTF-8.
Se você estiver escrevendo seu próprio aplicativo, usar UTF-8 internamente e, sempre que possível, armazenar e transmitir é uma boa ideia.