UTF 8 имен файлов?


15

В операционных системах на основе Unix допустимы имена файлов utf6? Если это так, мне нужно сделать что-то особенное, чтобы записать файл на диск.

Позвольте мне объяснить, что я надеюсь сделать. Я пишу приложение, которое будет передавать файл через ftp в удаленную систему, но имя файла динамически устанавливается с помощью некоторого набора метаданных, которые потенциально могут быть в utf8. Мне интересно, есть ли что-то, что мне нужно сделать, чтобы записать файл на диск в unix / linux.

Также в качестве продолжения кто-нибудь знает, что произойдет, если я загрузлю имя файла utf 8 в систему, не поддерживающую utf8?

Ответы:


20

В Unix / Linux имя файла - это последовательность любых байтов, кроме слэша или NUL. Косая черта разделяет компоненты пути, а NUL завершает имя пути.

Таким образом, вы можете использовать любую кодировку для имен файлов. У некоторых приложений могут возникнуть проблемы с некоторыми кодировками, если они наивно не знают, какие символы могут быть в именах файлов - например, плохо написанные сценарии оболочки часто не обрабатывают имена файлов с пробелами.

Современная среда Unix / Linux прекрасно обрабатывает имена файлов в кодировке UTF-8.


12

Внутренне, большинство файловых систем хранят байты: драйвер файловой системы не заботится о том, что означают байты. Общий драйвер файловой системы в 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 для внутреннего использования и, по возможности, для хранения и передачи.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.