Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Кириллица в именах файлов #7

Open
artyomxx opened this issue May 2, 2012 · 13 comments
Open

Кириллица в именах файлов #7

artyomxx opened this issue May 2, 2012 · 13 comments

Comments

@artyomxx
Copy link

artyomxx commented May 2, 2012

Проблема с Win8 и FreeBSD 9.

По идее, везде utf8, но при запуске удаляются все файлы с кириллицей в именах на сервере и в консоли постоянно появляется что-то вроде:
file has vanished: "/cygdrive/d/....../images/673/P1030685-?????.jpg",
где "????" - это кириллические символы.

Попытка добавить в RSYNC_OPTIONS что-нибуд вроде "--iconv=UTF8,UTF8" даёт ошибки:
iconv_open("UTF-8", "UTF8") failed
rsync error: requested action not supported (code 4) at rsync.c(120) [sender=3.0.6]

Гугление этой ошибки приводит к опции no_chroot у демона, но для не-демона такой опции нет или я чего-то не понимаю.

Вот.

@dimikot
Copy link
Owner

dimikot commented May 3, 2012

Кодировки - это вообще больное место в cygwin. От версии к версии они меняют правила работы. В realsync используется далеко не самая новая версия cygwin, именно из-за того, что там проблемы с кодировками минимальны - но, видите, все же всплыло что-то.

Попробуйте запуститься на более свежей версии cygwin (заменить файлы в bin/win32) - вдруг поможет.

@artyomxx
Copy link
Author

artyomxx commented May 3, 2012

ok, попробую. спасибо.

@dimikot
Copy link
Owner

dimikot commented May 30, 2014

Помогло, кстати? Чем дело закончилось?

@artyomxx
Copy link
Author

На сколько я помню, нет. Закончилось объяснением человеку, что кириллица в именах файлов - это в принципе, не очень хорошо в веб-разработке. :)

@ghost
Copy link

ghost commented Feb 5, 2015

На форумах нашол вот такой вариант фикса
" в .bashrc:
alias ls='ls --show-control-chars' "
Но ето для cygwin. А как применить такие изменения в RealSync

@dimikot
Copy link
Owner

dimikot commented Feb 9, 2015

Последний раз я экспериментировал с кодировками и cygwin применительно к RealSync 3 года назад. Вполне вероятно, что за 3-то года разработчики cygwin все посторонние эффекты починили, и достаточно просто заменить версию cygwin в составе RealSync (bin/win32) на свежую, чтобы все заработало.

@ghost
Copy link

ghost commented Feb 10, 2015

Попробовал заменить и тут же столкнусля с проблемой. В новом cygwin отсутствует cygminires.dll. Поменял все "*.dll" и ".exe" файли в папке (bin/win32) видает ошибку при запуске
Microsoft Windows [Version 6.1.7601]

C:\RSync>realsync.exe
Can't locate File/Basename.pm in @inc (@inc contains: /usr/lib/perl5/site_perl/5
.14/x86_64-cygwin-threads /usr/lib/perl5/site_perl/5.14 /usr/lib/perl5/vendor_pe
rl/5.14/x86_64-cygwin-threads /usr/lib/perl5/vendor_perl/5.14 /usr/lib/perl5/5.1
4/x86_64-cygwin-threads /usr/lib/perl5/5.14 .) at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

Если не менять perl.exe то запускаетса но проблема не исчезает.(Даже в консоли вместо кирилици - ASCII )

@dimikot
Copy link
Owner

dimikot commented Feb 11, 2015

Понятно. Ну, значит, нужно экспериментировать и разбираться, простой заменой версии не обойтись. Там же накладываются 5 факторов: кодировка виндовой консоли, кодировка перла (что бы это ни означало), кодировка rsync-а, кодировка cygwin, кодировка сервера.

Попробуйте еще вот эту ошибку в перле (который из cygwin-а) решить так:

cd bin/win32
perl.exe ..\..\realsync

Потому что если вы распечатаете realsync.exe, то увидите там вот такую командную строку вызова:

bin\win32\perl.exe -e "use File::Basename; do(dirname($^X) . '/../../realsync'); die $@ if $@"

Вот в этом месте cygwin-овский perl и ругается на то, что не может найти File::Basename.

И еще может потребоваться заменить не только perl.exe на cygwin-овский, но еще и все модули, которые требуются realsync-у. Они все в bin/win32/lib/, и их очень-очень много (в том числе и их бинарные dll-ки в bin/win32/lib/auto; уж не знаю, как они в cygwin-овском perl называются и где лежат).

@ghost
Copy link

ghost commented Feb 11, 2015

Попробовал поменять полностью папку bin/lib большенство файлов заменил аналогами. Не нашел аналогов за названием
-Process.dll
-Which.dll
-bin/win32/lib/auto/Win32/ (все кроме Win32.dll)
-bin/win32/lib/Win32 (почти все)
-bin/win32/lib/Crypt (все)
пока аналогов найти не удалось так как не знаю что именно искать.
Вивод консоли при старте:

C:\RSync\bin\win32>perl.exe ....\realsync
Can't load 'C:/RSync/bin/win32/lib/auto/IO/IO.dll' for module IO: load_file:%1 н
е є припустимим застосунком Win32 at C:/RSync/bin/win32/lib/XSLoader.pm line 71.
at C:/RSync/bin/win32/lib/IO.pm line 11

Compilation failed in require at C:/RSync/bin/win32/lib/IO/Handle.pm line 266.
BEGIN failed--compilation aborted at C:/RSync/bin/win32/lib/IO/Handle.pm line 266.

Compilation failed in require at ....\realsync line 9.
BEGIN failed--compilation aborted at ....\realsync line 9.
C:\RSync\bin\win32>

Но вроде 1 раз норм кирилица прошла с Win7 на Ubuntu 12.04 (1 раз, скорее как глюк так как повторная отправка файла изменений не дала. Но факт остаетса, что уже радует.)

@dimikot
Copy link
Owner

dimikot commented Feb 12, 2015

Тут вот какая история: для realsync-а нужны модули из Win32, чтобы сворачиваться в трей (справа внизу маленькая иконка), издавать бибиканье и т.д. Я подозреваю, что в cygwin-овском perl этих модулей нет; весь вопрос, можно ли все-таки их как-то там задействовать или нет.

@dimikot
Copy link
Owner

dimikot commented Feb 12, 2015

...если, кстати, их никак нельзя задействовать, но perl хочется все-таки cygwin-овский, а не от ActiveState, то можно все упомянутые Win32-функции, наверное, реализовать в виде отдельного exe-шника, который в фоновом режиме должен работать и ждать команд на исполнение этих функций (например, через свой stdin). Этот exe-шник можно было бы написать на Си, скомпилировать и спокойно положить рядом в bin/win32.

@ghost
Copy link

ghost commented Feb 12, 2015

Ну exe-шник врятли напишу. Мне по сути всеровно какой Perl. Сечас попробую cygwin-овский заменить на ActivreState (новой версии). Может и чтото получитса. А за ехе-шник был бы благодарен.

Вставил ехе-шник нового ActiveState. И почти успех. Кирилицу, копирует только при открытии. При запуске ярлыка RealSync все файлы с кириличискими именами нормально копируютса на remote-машыну.Но когда ети файли еще раз продублировать то опять "???.docx". Пробую заменить остальные модули Active State. Кирилица в именах сохраняєтса каждий раз при перезапуске realsync.

@ghost
Copy link

ghost commented Feb 12, 2015

По максимуму заменил (все что совпало) модули с ActiveState. Попробовал запустить не пошло...Вивод вот какой....
C:\RSync\bin\win32>perl.exe ....\realsync
Can't locate loadable object for module attributes in @inc (@inc contains: C:/RS
ync/bin/win32/lib .) at ....\realsync line 53.
Compilation failed in require at ....\realsync line 53.
BEGIN failed--compilation aborted at ....\realsync line 53.
C:\RSync\bin\win32>

Ети файли не заменил (не нашел таких в ActiveState):

  • ../lib/auto/Win32/GUI - вся папка
  • ../lib/Win32/ - GUI.pm , HideConsole.pm
  • ../lib/Win32/TSA/ - вся папка
  • ../lib/Win32/PerlExe/ - вся папка
  • ../lib/Win32/GUI/ - вся папка
  • ../lib/Win32/API/ - Prototipe.pm
  • ../lib/List/Util/ - PP.pm
  • ../lib/Scalar/Util/ - PP.pm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants