LinuxForum.Fans
Тема

/etc/fstab - назначение кодировки языка

Автор: andrei186 5 сообщений 2033 просмотров
25.11.2014 14:55 #402414

формат записей в /etc/fstab предусматривает помимо прочего указание кодировки языка.

Что конкретно эта кодировка делает, если ее задать кириллической?
Пользовать кириллические названия файлов? Или иметь файлы с кириллицей?
Но за это вроде отвечает locale?
И что будет, если кодировка (скажем, русская) протиовречит настройкам локали (английской)?

25.11.2014 15:24 #402416

Он её предусматривает только для "чужих" типов, где это было предусмотрено изначально. Здесь же имена файлов - это просто последовательность байтов, которые вообще никак не интерпретируются (за исключением 0 и 0x2f)

25.11.2014 15:37 #402419
"andrei186" написал:
формат записей в /etc/fstab предусматривает помимо прочего указание кодировки языка.

Это не совсем так, точнее -- совсем не так.

Дело в том, что формат записей в /etc/fstab предусматривает 6 полей (колонок).
4-е поле (fs_mntopts) содержит параметры монтирования файловой системы в виде разделенного запятыми списка без пробелов. Часть параметров обрабатывается самой утилитой mount, а остальное передается драйверу файловой системы, указанному в 3-м поле (fs_vfstype).

Так вот, среди общих параметров нет параметров, управляющих кодировками, эта часть относится не к формату /etc/fstab, а к параметрам конкретного драйвера ФС.

25.11.2014 15:58 #402421

По поводу второй половины вопроса про "что будет".
Вот смотрите, раздел FAT. Русские короткие имена лежат в cp866.
Смотрим man mount на предмет "Mount options for fat", видим

codepage=value
Sets the codepage for converting to shortname characters on FAT and VFAT filesystems. By default, codepage 437 is used.

iocharset=value
Character set to use for converting between 8 bit characters and 16 bit Unicode characters. The default is iso8859-1. Long filenames are stored on disk in Unicode format.

Что на великом и могучем примерно:

codepage=value
Задает кодовую страницу для преобразования символов коротких имен файловых систем FAT и VFAT. По умолчанию используется кодовая страница 437.

iocharset=value
Кодировка для преобразования между 8-битными символами и 16-битными символами Юникода. По умолчанию iso-8859-1. Длинные имена хранятся на диске в Юникоде.

Следовательно, если не укажете явно эти параметры, драйвер будет работать как если бы ему указали: codepage=437,iocharset=iso-8859-1.

Что при этом будет?
Для коротких имен: положите рядом таблицы 437 и 866 кодовой страниц, русские буквы из 866, совпавшие с буквами 437, станут в Юникоде буквами из 437 страницы. Например, буква "А" станет "Ç", "Б" -- "ü" и т.д.
Для длинных имен: аналогично с iso-8859-1 и iso-8859-5, если правильно путаю.

Для драйвера ntfs-3g картина будет иная -- если его параметры выставлены неверно, то файлов с русскими именами просто не будет видно.

25.11.2014 18:28 #402440

спасибо

Войдите или зарегистрируйтесь, чтобы ответить.