Зависит ли это от того, какую файловую систему я использую? Например, ext2 / ext3 / ext4, а также что происходит, когда я вставляю один из этих «веселых» компакт-дисков с ISO 9660? Я слышал, что POSIX содержит какие-то спецификации для кодировки имен файлов в кодировке?
По сути, мне интересно, если я получил имя файла в кодировке UTF-8, какую обработку / покрытие мне нужно сделать, прежде чем передать его в API ввода-вывода файлов в Linux?
Ответы:
Как отмечают другие, на самом деле нет ответа на это: имена файлов и пути не имеют кодировки; ОС работает только с последовательностью байтов. Отдельные приложения могут по своему усмотрению интерпретировать их как кодируемые, но это варьируется.
В частности, Glib (используется приложениями Gtk +) предполагает, что все имена файлов имеют кодировку UTF-8, независимо от языкового стандарта пользователя . Это может быть переопределено переменными среды G_FILENAME_ENCODING и G_BROKEN_FILENAMES .
С другой стороны, Qt по умолчанию предполагает, что все имена файлов закодированы в локали текущего пользователя . Отдельное приложение может предпочесть переопределить это предположение, хотя я не знаю ни одного из них, и нет внешнего переключателя переопределения.
Современные дистрибутивы Linux настроены таким образом, что все пользователи используют локали UTF-8, а пути на монтировках сторонних файловых систем переводятся в UTF-8, поэтому это различие в стратегиях обычно не имеет никакого эффекта. Однако, если вы действительно хотите быть в безопасности, вы не можете предполагать какую-либо структуру имен файлов, кроме «последовательности байтов с разделителями NUL,« / ».
(Также обратите внимание: локаль может отличаться в зависимости от процесса. Два разных процесса, запускаемых одним и тем же пользователем, могут находиться в разных локалях просто из-за установки разных переменных среды.)
источник
'\x2F'
независимо от того, как выглядит/
. Заметно отличается в SJIS.Уровень linux в unix / posix не имеет значения, какую кодировку вы используете. Он хранит последовательность байтов вашей текущей кодировки как есть.
Я думаю, что эти опции монтирования существуют для того, чтобы помочь вам конвертировать определенные файловые системы, которые определяют кодировку, в вашу системную кодировку. (CDROM, NTFS и варианты FAT используют некоторые варианты Unicode).
Я бы хотел, чтобы unix определил глобальную кодировку системы, но на самом деле это настройка для каждого пользователя. Так что, если вы определите другую кодировку, чем ваша коллега, ваши имена файлов будут отображаться по-разному.
источник
Это зависит от того, как вы монтируете файловую систему, просто посмотрите на опции монтирования для разных файловых систем
man mount
. Напримерiso9660
,vfat
иfat
естьiocharset
иutf8
варианты.источник