Internamente, la mayoría de los sistemas de archivos almacenan bytes: al controlador del sistema de archivos no le importa lo que significan los bytes. El controlador genérico del sistema de archivos en Linux y en la mayoría de los otros dispositivos modernos permite que cualquier byte que no sea /
y el byte nulo aparezca en un nombre de archivo.
Hay sistemas de archivos que pueden tener restricciones de codificación, generalmente sistemas de archivos no nativos como FAT o NTFS. Algunos sistemas de archivos de red como Samba pueden traducir entre la codificación del servidor y la codificación del cliente; deberá asegurarse de que las configuraciones del servidor y del cliente sean coherentes.
Convencionalmente, en la mayoría de los sistemas, los bytes que forman un nombre de archivo se interpretan como UTF-8. Si ejecuta una aplicación que interpreta los nombres de los archivos como caracteres, por ejemplo, una aplicación que transmite los nombres a través de FTP, es posible que necesite configurar esta aplicación para indicarle que sus nombres de archivo están codificados en UTF-8. Establecer el entorno LC_CTYPE
en un entorno local UTF-8 como en_US.UTF-8
hace el truco para muchas aplicaciones de línea de comandos.
Si almacena archivos en un sistema que no es compatible con UTF-8, no importa. Los bytes seguirán siendo los mismos. No podrá mostrar los caracteres que componen los nombres de los archivos, pero si copia los archivos nuevamente en un sistema que admita UTF-8, esos mismos bytes seguirán apareciendo como caracteres UTF-8.
Si está escribiendo su propia aplicación, usar UTF-8 internamente y, siempre que sea posible, para almacenamiento y transmisión es una buena idea.