Добрый день уважаемые коллеги.
Есть одна простая с виду задача.
Имеем:
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) и т.д?
Заранее спасибо!
Не копирует файлы с кириллицей на FTP. Delphi
Модератор: Модераторы
Вообще-то примеры "как" у Вас прямо перед глазами - в адресной строке браузера. 
К примеру, русская буква "А" там отображается как "%C0". Вот и передавайте в свои компоненты FTP не русские символы, а их коды.
А вообще, из дополнительных компонент есть LNET и SYNAPSE. И там и там есть FTP-клмент.
К примеру, русская буква "А" там отображается как "%C0". Вот и передавайте в свои компоненты FTP не русские символы, а их коды.
А вообще, из дополнительных компонент есть LNET и SYNAPSE. И там и там есть FTP-клмент.
блин может я чего то не понимаю, но в том то и проблема, что понимают эти компоненты только символьные имена, никакие имена файлов состоящих не из символов, а из их кодов они не воспринимают...
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
prot56k, а ничего древнее delphi 7 найти не удалось? 
В windows есть системная функция GetShortPathName - преобразование длинных имен в короткие неюникодовские. Попробуйте.
В windows есть системная функция GetShortPathName - преобразование длинных имен в короткие неюникодовские. Попробуйте.
prot56k писал(а):блин может я чего то не понимаю
Вот это глубоко верное замечание.
Ну вот расскажите мне, Вы в строке адреса в браузере русские буквы вводили? Видели потом что получается? Разве не символы? Ну попробуйте маленько ручками поработать и посмотреть что получится. Может тогда моск и заработает...
