Внутренне, большинство файловых систем хранят байты: драйвер файловой системы не заботится о том, что означают байты. Общий драйвер файловой системы в Linux и большинстве других современных устройств позволяет любому байту, кроме /
и нулевого байта, появляться в имени файла.
Существуют файловые системы, которые могут иметь ограничения кодирования - обычно это не нативные файловые системы, такие как FAT или NTFS. Некоторые сетевые файловые системы, такие как Samba, могут преобразовывать кодировку сервера в кодировку клиента; вам нужно убедиться, что конфигурации сервера и клиента согласованы.
Обычно в большинстве систем байты, составляющие имя файла, интерпретируются как UTF-8. Если вы запускаете приложение, которое интерпретирует имена файлов как символы, например приложение, которое передает имена по FTP, вам может понадобиться настроить это приложение, чтобы сообщить ему, что ваши имена файлов закодированы в UTF-8. Настройка среды LC_CTYPE
на язык UTF-8, как это en_US.UTF-8
делается для многих приложений командной строки.
Если вы храните файлы в системе, которая не поддерживает UTF-8, это не имеет значения. Байты останутся прежними. Вы не сможете отображать символы, составляющие имена файлов, но если вы скопируете файлы обратно в систему, которая поддерживает UTF-8, те же байты все равно будут отображаться как символы UTF-8.
Если вы пишете свое собственное приложение, хорошей идеей является использование UTF-8 для внутреннего использования и, по возможности, для хранения и передачи.