scr @ 16-11-2007 01:50:11

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

В Питоне есть функция определения кодировки файловой системы,

Код:

sys.getfilesystemencoding()

Данная функция возвращает различный результат, если запускать интерпретатор Питона под обычным пользователем - UTF-8 и под root, через команду sudo gainroot  - ANSI_X3.4-1968.

При этом Python пытается честно перекодировать переданную уникодовую строку в кодировку файловой системы и в итоге падает с сообщением UnicodeEncodeError. Происходит это только под root и не только при попытке создания файла, а даже при выводе на экран. Забавно, что если команде создания папки (или print) передать строку, уже перекодированную в UTF-8:

Код:

os.mkdir(newdir.encode("UTF-8"))

то это работает как под рутом, так и под обычным пользователем, но теряет портабельность. Вопрос - это настройки BusyBox или не лечится никак? И почему настройки шелла влияют на определение кодировки файлов? Переменные окружения под рутом смотрел - никаких намёков на ANSI_X3.4-1968 не нашёл.

gLobster @ 16-11-2007 02:00:11

По сути ответить не смогу, но одно напишу точно - русские буквы в именах директории - дурной тон программирования и чреват большими проблемами.

scr @ 19-11-2007 01:57:44

Не хочу разжигать холивары, но по сути не согласен. В эпоху повсеместного использования уникода (к файловой системе Maemo, к сожалению, не относится) - это мнение, IMHO, устаревшее. Странно, если сущности, которыми оперирует пользователь, называются по-русски, складываются в одноимённые директории, но названия этих папок должны быть не по-русски. Да, я думал о переводе в транслит, но как-то это неспортивно. Слишком по-юниксоидному. Просто надо научиться правильно их (русские буквы) готовить.

gLobster @ 19-11-2007 02:14:57

Хохма в том, что юникод в FAT - сбоку припёку. И поэтому он и становится источником ошибок. Конечно здесь шансов меньше, но всё же. Вполне чересчур умная "поправлялка FAT" легко прибьёт кириицу, особенно юникодовую. Ведь вопрос не в маемовской файловой системе, а в чисто микрософтовской FAT32 на какрточке, которая по определению для Unix чужая.

scr @ 19-11-2007 02:20:54

А-а-а, вот где собака порылась. Как-то я забыл, что на карточке у нас FAT32. Тогда понятно, почему определение кодировки работает криво. Сделал опцию которая, будучи указана в конфиге, устанавливает кодировку принудительно и на этом успокоился.