Страница 1 из 1

Не копирует файлы с кириллицей на FTP. Delphi

СообщениеДобавлено: 10.11.2019 12:44:54
prot56k
Добрый день уважаемые коллеги.
Есть одна простая с виду задача.

Имеем:
1. Delphi 7 (или c++builder 6) (без поддержки юникода естественно).
2. Компонент idFTP или NMFTP для копирования файла на FTP сервер.

Пишу приложение для заливки файла на FTP сервер, все бы ничего, но есть один момент: у некоторых клиентов язык программ не поддерживающих юникод выставлен не русский (к примеру английский), и вот тут начинается проблемы с копированием файлов на FTP,
которые в своем имени имеют русские буквы. При закачке файлов по FTP idFTP (NMFTP) пишет, что файл не обнаружен, что не удивительно,
поскольку кириллица в именах этих файлов заменяется на знаки "?", соответственно файлы не могут быть залиты из за того, что вместо настоящего имени (к примеру): c:\отчет\годовой_отчет_full2019.docx в компоненты idFTP (NMFTP) видят следующее: c:\?????\???????_?????_full2019.docx, что естественно не соответствует действительности.

В принципе такие файлы delphi 7 (c++builder 6) видят благодаря, тому, что с ними можно работать через widestring, но как только имена этих файлов
передаются в качестве входных параметров для компонентов idFTP (NMFTP) то, все рушится, поскольку эти компоненты не юникодные и они не могут нормально преобразовывать unicode в ansi и т.д. Если язык для non unicode установлен русский, то все норм, все копируется, но необходимо что бы программа могла копировать русскоязычные файлы на FTP сервер без всяких смен языковых локалей для non unicode программ (как установлено так и установлено).

Коллеги помогите решить проблему для именно этих версий delphi (или c++builder). Переход на полностью юникодную оболочку (к примеру delphi xe, c++builder xe) не возможен, слишком много переписывать.

Какие варианты решения этой проблемы вы мне посоветуете? Может есть какие нибудь альтернативные компоненты для работы с FTP с поддержкой unicode (наподобие визуальных TNTControls) и т.д?

Заранее спасибо!

Re: Не копирует файлы с кириллицей на FTP. Delphi

СообщениеДобавлено: 10.11.2019 19:38:33
Vadim
Вообще-то примеры "как" у Вас прямо перед глазами - в адресной строке браузера. ;-)
К примеру, русская буква "А" там отображается как "%C0". Вот и передавайте в свои компоненты FTP не русские символы, а их коды.
А вообще, из дополнительных компонент есть LNET и SYNAPSE. И там и там есть FTP-клмент.

Re: Не копирует файлы с кириллицей на FTP. Delphi

СообщениеДобавлено: 10.11.2019 20:15:11
prot56k
блин может я чего то не понимаю, но в том то и проблема, что понимают эти компоненты только символьные имена, никакие имена файлов состоящих не из символов, а из их кодов они не воспринимают...

Re: Не копирует файлы с кириллицей на FTP. Delphi

СообщениеДобавлено: 10.11.2019 22:25:36
Снег Север
prot56k, а ничего древнее delphi 7 найти не удалось? :mrgreen:

В windows есть системная функция GetShortPathName - преобразование длинных имен в короткие неюникодовские. Попробуйте.

Re: Не копирует файлы с кириллицей на FTP. Delphi

СообщениеДобавлено: 11.11.2019 03:21:24
Vadim
prot56k писал(а):блин может я чего то не понимаю

Вот это глубоко верное замечание. :D
Ну вот расскажите мне, Вы в строке адреса в браузере русские буквы вводили? Видели потом что получается? Разве не символы? Ну попробуйте маленько ручками поработать и посмотреть что получится. Может тогда моск и заработает... ;-)

Re: Не копирует файлы с кириллицей на FTP. Delphi

СообщениеДобавлено: 12.11.2019 13:21:04
serbod
Рекомендую уделить пару часов на эксперимент по переходу на Unicode. Мне это помогло лучше понять устройство многих вещей и обнаружить некоторые неочевидные ошибки.