Заметка: Данная секция этого HOWTO отсутствует в англоязычном варианте. Все дополнения и исправления присылайте на адрес переводчика.
Использование в Linux имен файлов содержащих кириллические символы, как и многие другие вещи, осложняется наличием трех кодировок, а также тем, что иногда программы вообще не содержат поддержки символов национального алфавита.
При использовании кириллических символов в именах файлов нужно учесть следующие обстоятельства:
для обеспечения совместимости записанных дисков с DOS кодировка символов в ISO9660 должна быть CP866 и имена файлов в формате 8.3 (8 символов - имя, 3 символа - расширение)
некоторые DOS драйвера CDROM приводов могут не поддерживать не ASCII символов в именах файлов
для обеспечения совместимости записанных дисков с Windows, необходимо добавлять расширение JOLIET, которое использует UNICODE кодировку имен файлов.
некоторые версии UNIX систем не поддерживают JOLIET расширение (Linux поддерживает при включении соответствующей опции при сборке ядра) и, если требуется совместимость с ними, должно использоваться расширение RockRidge.
Родная файловая система 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 |