Internamente, a maioria dos sistemas de arquivos armazena bytes: o driver do sistema de arquivos não se importa com o significado dos bytes. O driver genérico do sistema de arquivos no Linux e na maioria dos outros unices modernos permite que qualquer byte que não seja /
e o byte nulo apareça 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 converter 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 dos arquivos como caracteres, por exemplo, um aplicativo que transmita os nomes por FTP, pode ser necessário configurá-lo para informar que os nomes dos arquivos estão codificados em UTF-8. Definir o ambiente LC_CTYPE
para um código de idioma UTF-8, como en_US.UTF-8
faz o truque para muitos aplicativos de linha de comando.
Se você armazena arquivos em um sistema que não suporta UTF-8, isso 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 você copiar os arquivos para um sistema que suporte UTF-8, esses mesmos bytes ainda serão exibidos como caracteres UTF-8.
Se você estiver escrevendo seu próprio aplicativo, usar UTF-8 internamente e, sempre que possível, para armazenamento e transmissão é uma boa idéia.