LINUX.ORG.RU

> Ext3, XFS

В Linux у файловых систем нет кодировки, имена пишутся напрямую, без какого-либо преобразования. Считайте что кодировка имён файлов совпадает с текущей локалью.

Eshkin_kot ★★ ()
Ответ на: комментарий от Eshkin_kot

> NTFS, FAT32

Что ж тогда модули ядерные делают с таблицами кодировок?

t184256 ★★★★★ ()
Ответ на: комментарий от Eshkin_kot

>В Linux у файловых систем нет кодировки, имена пишутся напрямую, без какого-либо преобразования

Ага. Особенно когда под линуксом где-то примонтирована файловая система NTFS, в которой Unicode вшит по определению.

Преобразования делаются по-любому и при монтировании кодировки указываются. Если честно, точно не знаю где и как это делается, но думаю для каждой примонтированой fs есть отдельная настройка какое преобразовании надо осуществлять из текущей локали в кодировку fs и обратно.

pathfinder ★★★ ()
Ответ на: комментарий от pathfinder

Вообще-то, Eshkin_kot правильно сказал: мало ли какая ФС у вас примонтирована, все равно в опциях монтирования указывается текущая локаль. Так что париться на этот счет не надо. А уж узнать кодировку имен файлов «родной» линуксовой системы без enca невозможно: у меня, например, USB-HDD, локаль - koi8-r; если я подключу этот винт человеку с юникодом, ясное дело, вместо русских имен файлов у него будет черт те что, и узнать, какая же кодировка там на самом деле, можно только так: ls ??????? | enca.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от pathfinder

> Признаю. Был не прав. Похоже ext2/ext3 не делает преобразований. Это делается в fat/ntfs.

Ещё в cifs/smbfs, iso9660, jfs, ... Причём это преобразование не зависит от локали пользовательского процесса, а задаётся жёстко, одно на всех, при монтировании :(

Eshkin_kot ★★ ()
Ответ на: комментарий от Eshkin_kot

На этот случай в mc есть новая очень полезная штука - преобразование кодировки в панели. При копировании тоже можно сделать преобразование. Правда, с юникодом пока не работает - приходится после копирования таких файлов переименовывать их в КОИ-8 скриптиком.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eshkin_kot

в Linux у файловых систем нет кодировки

А зачем файловой системе кодировка? ФС наплевать, как вы обзовете файл. Этим уже ядро и пользовательские процессы занимаются. А узнать кодировку труда не составляет.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Именно. Для файловой системы имя файла - набор байт. Интерпретация этих последовательностей байтов возлагается на пользовательские программы. Можно иметь одновременно файлы в одной директории с именами во множестве кодировок.

anonymous ()
Ответ на: комментарий от Eddy_Em

А зачем файловой системе кодировка? ФС наплевать, как вы обзовете файл. Этим уже ядро и пользовательские процессы занимаются.

Кстати, очень ценное замечание, жаль что такое понимание приходит с опытом, а не прописывается в манах изначально.

Действительно, в опциях монтирования кодировка не указывается явно.

Хотя вот для ntfs есть опции

       iocharset=name
              Character  set  to  use when returning file names.  Unlike VFAT, NTFS suppresses names that contain unconvertible characters. Deprecated.

       utf8   Use UTF-8 for converting file names.

для iso9660

       iocharset=value
              Character set to use for converting 16 bit Unicode characters on CD to 8 bit characters. The default is iso8859-1.

       utf8   Convert 16 bit Unicode characters on CD to UTF-8.

и для vfat

       utf8   UTF8  is the filesystem safe 8-bit encoding of Unicode that is used by the console. It can be be enabled for the filesystem with this option.

Но это, видимо, для решения проблемы состыковки кодировок разной битности , а не состыковки разных кодировок одинаковой битности.

mclaudt ()
Ответ на: комментарий от mclaudt

И для стыковки кодировок одинаковой битности. Как по-вашему, я могу прочитать русские имена файлов/директорий на флешке в fat32 или на диске, записанном в мастдае (без рокриджа), когда у меня кодировка КОИ-8? Той же опцией iocharset=koi8-r :)

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Вот это и странно, ведь согласно идее http://www.linux.org.ru/jump-message.jsp?msgid=4509712&cid=4511106 программе монтирования должно быть пофиг на кодировку.

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

Тогда лучше считать, что опция монтирования iocharset= излишне умничает и пытается влезть не в свой «домен». Ведь, действительно, в общем случае на ФС могут быть файлы в разных кодировках, e.g. диски со школьным линуксом ;)

mclaudt ()
Ответ на: комментарий от mclaudt

А ей и так пофиг. Это просто опция, облегчающая жизнь пользователю.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от mclaudt

>Это дело файлового менеджера или другой программы, с помощью которой проводится чтение/запись
имхо, преобразование имен файлов из кодировки, в которой они были первоначально туда записаны какой-либо не очень продвинутой осью, в локальную кодировку всей системы лежит как раз на плечах драйвера ФС.

в случае, если они совпадают - никаких действий производить не надо.
в принципе это и есть действие по умолчанию. т.е. если специально не указано драйвер считает, что кодировка на ФС совпадает с текущей кодировкой локали.
а если указать, что на фс файлы в utf8, а локаль при этом koi8-r - надо конвертить.

xydo ★★ ()
Ответ на: комментарий от xydo

> в локальную кодировку всей системы

В Linux нет локальной кодировки всей системы, каждая программа может иметь свою локаль и кодировку.

в принципе это и есть действие по умолчанию. т.е. если специально не указано драйвер считает, что кодировка на ФС совпадает с текущей кодировкой локали.

вообщето нет :) если почитать man mount то можно увидеть что например для iso9660: «The default is iso8859-1», для fat: «By default, codepage 437 is used.» (это кодировка на диске) + «iocharset ... The default is iso8859-1» (это кодировка локали).

Eshkin_kot ★★ ()
Ответ на: комментарий от Eshkin_kot

>iso9660: «The default is iso8859-1»,
это, можно считать, не попадает под мои слова «если специально не указано»)

В Linux нет локальной кодировки всей системы, каждая программа может иметь свою локаль и кодировку.

да, немного перепутал. имел в виду кодировку и локаль текущего приложения.

xydo ★★ ()
Ответ на: комментарий от Eshkin_kot

При компиляции ядра можно указать правильную кодировку для vfat и локаль системы. Так что эти умолчания работают только для дефолтных ядер.

Eddy_Em ☆☆☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.