Русские названия файлов и архивы

Русские названия файлов и архивы

от Vadim Dvorovenko -
Количество ответов: 19
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
У наших преподавателей оказался большой объём наработок html с русскими названиями. Такие файлы появляются после сохранения в internet explorer, когда появляется папочка названиефайла.files. Естественно, что все ссылки там на файлы с русскими названиями. Способа исправить все эти ссылки и переименовать файлы в английский язык не знаю.
Если такие файлы разместить вручную в папке с номером курса на сервере, то всё работает великолепно, то есть никаких тезнических трудностей сами по себе moodle, php и apache не создают.
Можно ли отключить транслитерацию названий файлов при загрузке и будут ли они после этого корректно закачиваться?
Ну или может быть есть какое-то простое и бесплатное средство, которое можно раздать простым пользователям, чтобы транслитировать гору html со всеми ссылками внутри?

Если файлы с русскими буквами заархивировать в zip (сжимал через winrar), то при разархивации гонит кодировка и они с неправильными именами остаются, через сайт их уже не удалишь, только вручную на сервере.
Можно ли сделать, чтобы кодировка не гнала? Или чем жать, чтобы кодировал имена в zip-е в utf-8, как на сервере, может тогда не будет проблемы?
Что бы такое придумать, чтобы сервер не пытался даже разархивировать файлы с кривыми именами внутри, чтобы потом админа не дёргали с просьбой удалить хлам.
moodle 1.9.5 последний, ubuntu 8.04, apache 2, php 5
В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
Ну вы же все сами поняли улыбаюсь
В архивах нет данных о кодировки. Нужно чтобы при распаковке архива можно было указать кодировку и не распаковывать архивы если в них есть недопустимые имена файлов.
IMHO
1) нужно патчить unzip
2) переписывать распаковщик зип-ов в moodle

unzip патченный у меня где-то был, но кодировка там была прибита гвоздями 1251->KOI8-R

Кстати обнаружил, что какой-то $%&^% обозвал кодировку KOI8-R как KOI-8R
из-за чего списки юзеров не загружались.

В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Dmitry Pupinin -
Я бы начал решение этой проблемы с поиска утилит для транслитерации.
Есть масса программ для переименовывания файлов, в том числе с использованием транслитерации, думаю что вполне можно найти программу для поиска и замены внутри текста с использованием транслитерации.
Поиск ссылок легко организовать с помощью регулярных выражений.
Короче, думаю тут вполне достаточно способов не вмешиваться в код Мудла.
В ответ на Dmitry Pupinin

Re: Русские названия файлов и архивы

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Да я тоже за решение с транслитерацией - но тут нужна программа, которой можно обучить пользоваться за полчаса и описанием не более страницы текста. Иначе проблемы останутся и решать их придётся не преподавателям, а админам.

А вот запрет на разархивацию архивов, которые содержат кривые имена файлов надо всё-таки к Мудл прикрутить и код придётся править.
В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
не надо транслитерации!
Нужно правильно распаковать архивы. тогда не нужно ничего править внутри архивов!

Перед распаковкой проверяется список имен файлов в архиве (после перекодировки), если есть хоть один недопустимый символ, то посылаем юзера перепаковывать архив.

IMHO это самый простой способ.

В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
получить список файлов из .zip не сложно. Проверка валидности имен процедура простая. Так что правка кода должна быть незначительная.

Да и для разных платформ можно реализовать разные проверки....
В ответ на Виталий Лавров

Re: Русские названия файлов и архивы

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Есть ли какие-то просветы на данном поприще?
искал на трекере - нашёл только http://tracker.moodle.org/browse/MDL-18056 , но там тишина.

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

Потом оказалась, что с мудлом тоже не всё число - создал папки с русскими именами на сервере. Заархивировал их и тут же разархивировал обратно, всё средствами moodle. Вместо привычных слов полезли всякие пакости...
В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Валерий Слободин -
Вы уже полгода мучаетесь! Не проще было открыть html файл и пересохранить с английским названием. А то и вообще цифрами пометить как разделы в курсе. Это для файлов к картинками. А транслитерация одиночных файлов работает неплохо. Нет проблем!
В ответ на Валерий Слободин

Re: Русские названия файлов и архивы

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Я и не мучался. Я админ и моя задача сделать, чтобы у людей было как можно меньше вопросов, ибо все нерешённые вопросы падают на меня.
Сейчас я вручную загружаю на сервер html с русскими именами через ftp в папки с курсами. А там есть материалы с сотнями html. Вот если бы zip заработал, то я бы их всех направлял к инструктору, со словами "он вас научит".
А если пользователь не может чего-то сделать без администратора автоматизированной системы, то это уже не автоматизированная система.
Опять же, если есть какой-то простой (желательно ещё и бесплатный) инструментарий, которым можно обработать папку с русскими именами, чтобы они превратилась в английские, да чтобы при этом не поломались все ссылки, то он тоже бы решил проблему.
В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Artem Andreev -
Изображение пользователя Эксперт по Moodle
Не пробовали модуль book (http://moodle.org/mod/data/view.php?d=13&rid=319)? Если не ошибаюсь, там был импорт набора связанных html-страниц. Если импорт нормально проглотит Ваши файлы, то может подойдет такое решение...
В ответ на Artem Andreev

Re: Русские названия файлов и архивы

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Спасибо, но это не совсем то.
Во-первых, авторы весьма ревностно относятся к своему оформлению страницы, часть которого может потеряться.
Ну и главное - для того, чтобы этот модуль правильно поглотил связанные файлы, их нужно предварительно загрузить.
А при всех доступных пользователю способах загрузки имена файлов портятся: когда по одному, то в транслит, когда через zip, то в крокозябры.
Кстати, где-то видел настройку, позволяющую отключить транслитерацию имён файлов, а теперь найти не могу...
В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Проблема решена, прикладываю патч для GIT
Особенности:
1. moodle 1.9.7
2. если в архиве есть файлы с символами, код которых больше 127, список этих файлов показывается и предлагается выбрать кодировку. Если таковых файлов нет, различия не будут видны.
3. Работает только со встроенными функциями moodle, поэтому, в администрирование->сервер->системные пути не нужно заполнять поле для unzip
4. С unzip не удалось получить внятного результата, так как он в дополнение как-то по-своему перекручивает кодировки. Это приводит, например, к тому, что если заархивировать папку с русскими именами, а потом её тут же разархивировать, получатся две разные папки.
В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Vadim Tabunshchik -
Изображение пользователя Developers
Че-то не работает грущу
Правильные названия файлов, к примеру Памятка.doc, МатПлаты.pdf, при распаковке архива отображаются, только если выбрать CP866. После распаковки эти файлы с названиями кракозябрами: ����⪠.doc, ��⏫���.pdf
В Винде используется Windows-1251, выбираешь ее - получаешь Џ ¬пвЄ .doc


В ответ на Vadim Tabunshchik

Re: Русские названия файлов и архивы

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Версия moodle? Операционка сервера? Кодировка файловой системы сервера? Очистили ли путь к unzip в адинистрирование/сервер/системные пути? Чем архивировали?

Беда в винде в том, что файлы хранятся в 866, а отображаются в 1251, преобразовываясь на лету всякими строенными функциями. А большинство архиваторов не задумываются и крутят в том виде, в котором найдут на диске.

Я пробовал, например, архиватор для jar-файлов - это тот же zip, только обязательно преобразует в unicode. Так вот он преобразовывал имена из 1251 в unicode и получалась ерунда, так как на самом деле имена были в 866.

Плюс нужно иметь в виду, что под виндой на диске файлы будут с жуткими именами, а через мудл всё будет по-русски, так как он будет их отдавать преобразуя всё к юникоду.
В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Vadim Tabunshchik -
Изображение пользователя Developers
Мудл 1.9.7, апач, РНР и Mysql установлены по-отдельности.
Вадим, пробовал пока на лок. компе под WindowsXP. Соответственно, путь к unzip не указан. Архивировал встроенным плагином Тотал Командора. И под виндой, и в Мудл файлы с "жуткими именами".
Могу попробовать на рабочем серваке под FreeBSD, но позже улыбаюсь
В ответ на Vadim Tabunshchik

Re: Русские названия файлов и архивы

от Vadim Tabunshchik -
Изображение пользователя Developers
На рабочем серваке под FreeBSD работает, как и положено.
При распаковке выбрал СР866 и названия всех файлов отображаются кириллицей, можно удалять, переименовывать (тогда Мудл названия транслитерирует) Круто
Пробовал эти же доки архивировать средствами Мудл и опять разархивировать, полет нормальный.
Спасибо, теперь у преподавателей не будет "неудаляемых" файлов, а нам, админам, осталось хлам почистить.
В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Vadim Tabunshchik -
Изображение пользователя Developers

Вадим, день добрый улыбаюсь

Надо бы патчик подправить, а то после обновления до 1.9.10+ все работает, но вылезли строки с NOTICE. У себя поправил, потому что достали уже грущу

Правка такая - в файле /files/index.php нужно добавить строки (зеленого цвета):

case "unzip":
html_header($course, $wdir);
if (($file != '') and confirm_sesskey()) {
$strok = get_string("ok");
$strunpacking = get_string("unpacking", "", $file);
$strname = get_string("name");
$strsize = get_string("size");
$strmodified = get_string("modified");
$file = basename($file);
include_once("$CFG->libdir/pclzip/pclzip.lib.php"); и далее по тексту

В ответ на Dmitry Pupinin

Re: Русские названия файлов и архивы

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
это все можно, но долго и дорого. Проще проверить на корректность имен файлов в архиве и послать юзера самостоятельно переименовывать файлы в случае нахождения недопустимых символов.

Или пусть юзер сам какой-то программой все транслитерирует и закачает нормальный архив.

В ответ на Vadim Dvorovenko

Re: Русские названия файлов и архивы

от Марк Гершкович -
Еще одна проблема.

Если zip-архив лежит в папке с русским названием, то название неправильно перекодируется, во что-то типа Теоретический_материал .

Что с этим можно сделать?