Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > idFTP. Проблема с русскими буквами!


Автор: val1401 15.9.2010, 15:39
Здравствуйте!!!
У меня такая проблемка... 
Если выполнить:
Form1.IdFTP1.ChangeDir(Directory_FTP);
То получаю:
/?????: No such file or directory.
В данном случае имя директории задаётся русскими буквами, если же директория названа латинскими буквами то всё работает...
Это же касается и загрузки/отправки файлов...
То есть при работе с FTP сервером все русские буквы распознаются как '?'.

Автор: Akella 15.9.2010, 15:53
Для начала нужно понять, в какой кодировке работает сервер.
Посмотри здесь примеры методов работы с кодировками:
http://atozedsoftware.newsgroups.archived.at/indy.protocol.ftp/201005/1005112495.html
Цитата

if IsExtSupported('UTF8') then begin {do not localize}
    // trying non-standard UTF-8 extension first, many servers ...
    if SendCmd('OPTS UTF8 ON') <> 200 then begin {do not localize}
      // trying draft-ietf-ftpext-utf-8-option-00.txt next...
      if SendCmd('OPTS UTF-8 NLST') <> 200 then begin {do not localize}
        Exit;
      end;
    end;
    IOHandler.DefStringEncoding := TIdTextEncoding.UTF8;
  end;


обрати внимание на команды: OPTS UTF8 ON и OPTS UTF8 OFF, их можно отправлять с помощью метода SendCmd

Код

if SendCmd('OPTS UTF8 OFF') = 200 then сервер для нас успешно переключился в ANSI кодировку


Добавлено через 1 минуту и 17 секунд
Но я последнее время использую ICS.
Код

    //кодировка. По умолчанию UTF8 OFF
    FtpClient1.NewOpts := comboboxOpts.Text;
   
//в выпадающем списке comboboxOpts есть значения: [I]UTF8 ON[/I] и [I]UTF8 OFF[/I]
  case ansiindextext(comboboxOpts.Text, ['UTF8 ON', 'UTF8 OFF']) of
    0:FtpClient1.CodePage := CP_UTF8;
    1:FtpClient1.CodePage := CP_ACP;
  else
    FtpClient1.CodePage := 0;
  end;//case



Добавлено через 2 минуты и 57 секунд
1. Ты версию IDE держишь в секрете??
2. Советую всегда обновлять indy до последней версии.

Добавлено через 4 минуты и 38 секунд
Учти ещё тот момент, если будешь получать данные с сервера в юникоде и пытаться их преобразовать: много сайтов ни как не обрабатывают символы, то есть имена в списке могут быть одновременно в разных кодировках.

Добавлено через 6 минут и 56 секунд
эту тему тоже читал?
http://forum.vingrad.ru/forum/topic-289055/anchor-entry2086106/0.html

Добавлено через 7 минут и 42 секунды
вот ещё
http://programmersforum.ru/showthread.php?t=82347

Добавлено через 10 минут и 6 секунд
Цитата(val1401 @  15.9.2010,  15:39 Найти цитируемый пост)
Если выполнить:
Form1.IdFTP1.ChangeDir(Directory_FTP);
То получаю:
/?????: No such file or directory.


а в какой кодировке ты отправляешь данные и в какой кодировке работает сервер по-умолчанию?

Автор: val1401 15.9.2010, 16:08
IsExtSupported('UTF8') возвращает false...
Как быть дальше?

Добавлено через 13 минут и 7 секунд
Цитата

а в какой кодировке ты отправляешь данные

Просто допустим Form1.IdFTP1.ChangeDir('Папка1');

Цитата

и в какой кодировке работает сервер по-умолчанию? 

А как это узнать?

Автор: Akella 15.9.2010, 19:31
Я ж тебе уже дал кучу информации. Изучи всё повнимательнее.

Добавлено через 49 секунд
Цитата(val1401 @  15.9.2010,  16:08 Найти цитируемый пост)

и в какой кодировке работает сервер по-умолчанию? 

А как это узнать? 


Почему я должен повторять?

Изучи моё сообщение и все ссылки внимательно.

Добавлено через 1 минуту и 32 секунды
Цитата(val1401 @  15.9.2010,  16:08 Найти цитируемый пост)
и в какой кодировке работает сервер по-умолчанию? 

А как это узнать? 


Повторяю.
Цитата(Akella @  15.9.2010,  15:53 Найти цитируемый пост)
if SendCmd('OPTS UTF8 OFF') = 200 then сервер для нас успешно переключился в ANSI кодировку


Может можно и как-то по другому. См справку, примеры.

Автор: val1401 16.9.2010, 12:23
Начал переделывать через ICS...
Хочу спросить как загрузить все файлы из директории FTP...
Вот нашёл подсказку как это сделать, но чёто не соображу...

Receive many files in a single connection 
Francois Piette  [email protected]     
21.09.1998

Connect, Cwd, Get, Get, Get, and Quit. Use the xxxAsync commands.Use the OnRequestDone event to start the next Get. 

Автор: Akella 16.9.2010, 15:10
Цитата(val1401 @  16.9.2010,  12:23 Найти цитируемый пост)
Начал переделывать через ICS...
Хочу спросить как загрузить все файлы из директории FTP...

1. При чём здесь загрузка директории с помощью ICS? Лучше создай новую тему, назови её по-человечески и там задай нормально вопрос.

2. Посмотри примеры работы Ftpcli

Добавлено через 1 минуту и 19 секунд
Создай новую тему, я скину пример

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)