Какое кодирование набора символов используется для имен файлов и путей на Linux?

Это расширилось, атрибуты - Видят страницу справочника OSX здесь для получения дополнительной информации о ls.

47
12.02.2011, 23:29
3 ответа

Как отмечено другими, нет действительно ответа на это: имена файлов и пути не имеют кодирования; ОС только имеет дело с последовательностью байтов. Отдельные приложения могут принять решение интерпретировать их как закодированный в некотором роде, но это варьируется.

А именно, Бойкий (используемый Gtk + приложения) предполагает, что все имена файлов являются закодированным UTF-8, независимо от локали пользователя. Это может быть переопределено с переменными среды G_FILENAME_ENCODING и G_BROKEN_FILENAMES.

С другой стороны, спокойные значения по умолчанию к предположению, что все имена файлов кодируются в локали текущего пользователя. Отдельное приложение может принять решение переопределить это предположение, хотя я не знаю ни о ком, которые делают, и нет никакого внешнего переключателя переопределения.

Современные дистрибутивы Linux настраиваются таким образом, что все пользователи используют локали UTF-8, и пути на внешнем монтировании файловой системы переводятся в UTF-8, таким образом, это различие в стратегиях обычно не имеет никакого эффекта. Однако, если Вы действительно хотите быть в безопасности, Вы не можете принять структуру об именах файлов вне "NUL-завершенного ', / '-delimited последовательность байтов".

(Также примечание: локаль может варьироваться процессом. Два различных процесса, выполненные тем же пользователем, могут быть в различных локалях просто путем установки различных переменных среды.)

50
27.01.2020, 19:34

unix/posix слой Linux не заботится, какое кодирование Вы используете. Это хранит последовательность байта Вашего текущего кодирования как есть.

Я думаю, что они монтируют, что опции там, чтобы помочь Вам преобразовать определенные файловые системы, которые определяют набор символов к Вашему системному набору символов. (CD-ROM, NTFS и варианты FAT используют некоторые unicode варианты).

Мне жаль, что Unix не определил систему глобальное кодирование, но это на самом деле на пользователя, устанавливающего. Таким образом, при определении другого кодирования затем коллега имена файлов обнаружатся по-другому.

11
27.01.2020, 19:34
  • 1
    портов хорошо таким образом, я должен, вероятно, проверить то, что локаль пользователь в настоящее время использует и преобразовывает в который для, новых файлов так, чтобы он будет видеть имя файла правильно в Наутилусе и т.д. Как я могу сказать то, что текущий набор символов имени файла для текущего пользователя? хороший –  martin 15.09.2010, 21:28
  • 2
    @martin Это даже не настолько просто... Различные процессы могут использовать различную кодировку, в зависимости от огибающих переменных и языка, в котором это было записано. –  Basic 05.03.2016, 22:42

Это зависит от того, как Вы монтируете файловую систему, просто смотрите на опции монтирования для различных файловых систем в man mount. Например, iso9660, vfat и fat иметь iocharset и utf8 опции.

5
27.01.2020, 19:34
  • 1
    Таким образом, если я монтирую его с помощью utf8, я должен также передать utf8 открытому () syscall? –  martin 15.09.2010, 20:11
  • 2
    Также я нашел это (library.gnome.org/devel/glib/unstable / …), который, кажется, указывает, что кодирование набора символов имен файлов зависит от того, какая локаль установлена? –  martin 15.09.2010, 20:11

Теги

Похожие вопросы