Использование символов национального алфавита в именах файлов

Заметка: Данная секция этого HOWTO отсутствует в англоязычном варианте. Все дополнения и исправления присылайте на адрес переводчика.

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

При использовании кириллических символов в именах файлов нужно учесть следующие обстоятельства:

Родная файловая система Linux - ext2 не делает никаких предположений о кодировке символов, она просто хранит имена файлов в 8-битном представлении. Правильность интерпретации кодировки имени файла зависит от locale настроек программы, которая его создала и программы, которая выводит его пользователю. Так как Linux способен работать со всеми кириллическими кодировками (cp866, cp1251, koi8-r, koi8-ru, iso8859-5), то вполне возможен случай, когда пользователь создаст файл в терминале с cp866 настройками, а затем попытается его считать его (возможно на другом компьютере) в терминале с koi8-r настройками, и будет озадачен.

Текущая версия mkisofs-1.12.1 при составлении имен файлов ISO9660 заменяет все не ASCII символы (в том числе и кириллические) на знак '_'. Таким образом, без применения заплаток к mkisofs невозможно записать диск совместимый с DOS. Мне пока не удалось отыскать такую заплатку, если у кого-то есть положительный опыт записи таких дисков - дайте мне знать.

Универсальный метод - включить в записываемый диск оба расширения и JOLIET, и RockRidge. RockRidge будет содержать символы в 8 битном представлении, как и в файловой системе. Начиная с версии cdrecord-1.8.1 поставляемая в комплекте программа mkisofs содержит опцию -jcharset, для указания кодировки символов имен файлов при преобразовании в Joliet UNICODE. Список доступных кодировок можно получить командой

mkisofs -jcharset help

В этом списке присутствуют cp866 и koi8-r но (пока?) отсутствует cp1251.

Если Ваша система использует кодировку koi8-r в качестве основной, что обычное дело под Linux, то команда создания образа диска может быть такой

mkisofs -r -J -jcharset=koi8-r <путь к каталогу с файлами> <путь к образу диска>

Если файлы для создания диска находятся не на разделе с ext2 файловой системой, то, возможно, потребуется указать опции codepage и iocharset перед монтированием файловой системы. Например, при монтировании раздела с FAT/VFAT и выбранной кодировке koi8-r необходимо указать:

mount -o codepage=866,iocharset=koi8-r /dev/hdc1 /mnt/dos

при монтировании NTFS:

mount -o iocharset=koi8-r /dev/hdc2 /mnt/ntfs

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

При монтировании компакт-диска с Joliet расширением для правильной трансляции имен файлов из UNICODE необходимо также указывать с опцией iocharset желаемую кодировку для отображения.

mount -o iocharset=koi8-r /dev/cdrom /mnt/cdrom