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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
prot56k
незнакомец
Сообщения: 8
Зарегистрирован: 20.08.2019 13:22:23

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

Сообщение 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) и т.д?

Заранее спасибо!
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Вообще-то примеры "как" у Вас прямо перед глазами - в адресной строке браузера. ;-)
К примеру, русская буква "А" там отображается как "%C0". Вот и передавайте в свои компоненты FTP не русские символы, а их коды.
А вообще, из дополнительных компонент есть LNET и SYNAPSE. И там и там есть FTP-клмент.
prot56k
незнакомец
Сообщения: 8
Зарегистрирован: 20.08.2019 13:22:23

Сообщение prot56k »

блин может я чего то не понимаю, но в том то и проблема, что понимают эти компоненты только символьные имена, никакие имена файлов состоящих не из символов, а из их кодов они не воспринимают...
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

prot56k, а ничего древнее delphi 7 найти не удалось? :mrgreen:

В windows есть системная функция GetShortPathName - преобразование длинных имен в короткие неюникодовские. Попробуйте.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

prot56k писал(а):блин может я чего то не понимаю

Вот это глубоко верное замечание. :D
Ну вот расскажите мне, Вы в строке адреса в браузере русские буквы вводили? Видели потом что получается? Разве не символы? Ну попробуйте маленько ручками поработать и посмотреть что получится. Может тогда моск и заработает... ;-)
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

Рекомендую уделить пару часов на эксперимент по переходу на Unicode. Мне это помогло лучше понять устройство многих вещей и обнаружить некоторые неочевидные ошибки.
Ответить