Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IdFTP CharacterSet, кодировка в TIdFTP 
:(
    Опции темы
Akella
  Дата 25.1.2010, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Установил новую версию Indy - 10.5.7
Проблема с кодировкой имен файлов.
На сервере (Windows + Serv-U, настройка utf8 отключена) все имена файлов в кодировке Win1251.
А "умный" idFtp думает, что на той стороне все имена файлов в юникоде.
Serv-U отдаёт имена файлов в кодировке win-1251.
Как мне правильно пнуть компоненту idFtp, чтобы она знала, что на сервере win1251?

Это сообщение отредактировал(а) Akella - 26.1.2010, 10:38
PM MAIL   Вверх
Akella
Дата 26.1.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Код

IdFTP.get(IdFTP.DirectoryListing[h].FileName, sInPhotoFolder+IdFTP.DirectoryListing[h].FileName, true);


Получаем в дыню.
raised exception class EIdReplyRFCError with message '/photoout/aiia-106160.rar: No such file or directory.

а на самом деле файл называется дома-106160.rar
PM MAIL   Вверх
Akella
Дата 26.1.2010, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



В общем в код нужно добавить 2 строки
Код

IdFTP.IOHandler.DefStringEncoding := en7Bit;
IdFTP.MLis := False;


Но теперь при попытке получить файл вываливается исключение:
Цитата
raised exception class EIdReplyRFCError with message 'Syntax error in parameters or arguments.'


PM MAIL   Вверх
Akella
Дата 28.1.2010, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Если оставить всё в idFTP по-умолчанию, а на сервере включить UTF-8, то idftp видит файлы ввиде знаков вопросов
Цитата

????-118350.rar
????-119662.rar
????-119822.rar
????????-114218.rar
????????-114649.rar
????????-119566.rar
????????-119792.rar
????????-119817.rar
????????-119820.rar


хотя на сервере имена файлов в юникоде
user posted image
PM MAIL   Вверх
Matematik
Дата 30.1.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



В девятой версии делал просто: после логина пытался включить UTF8 и запоминал результат
Код

FIsUTF8 := AFtp.SendCmd('OPTS UTF8 ON') = 200;


все команды передавал через собственные методы:
Код

procedure TSyncThread._FTP_ChangeDir(AFtp: TIdFTP; const ADirName: string);
var z: AnsiString;
begin
  if FIsUTF8 then
    z := AnsiToUtf8(ADirName)
  else
    z := FixBug255(ADirName);
  //---
  AFtp.ChangeDir(z);
end;

PM MAIL WWW ICQ   Вверх
Akella
Дата 1.2.2010, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Цитата(Matematik @  30.1.2010,  23:11 Найти цитируемый пост)
пытался включить UTF8

включить у себя на клиенте или "сказать" серверу, что тебе нужна кодировка UTF8?
PM MAIL   Вверх
Matematik
Дата 1.2.2010, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Цитата(Akella @  1.2.2010,  10:35 Найти цитируемый пост)
"сказать" серверу, что тебе нужна кодировка UTF8? 

Сказать, а там уже клиент работает в соответствии с ответом.

<< OPTS UTF8 ON # посылаю команду серверу "мне нужен UTF8"
>> 200 UTF8 OPTS ON # проверить ответ
если отвечает кодом 200 - UTF8 включен, в другом случае сервер работает в той кодировке на что настроен
PM MAIL WWW ICQ   Вверх
Akella
Дата 1.2.2010, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Цитата(Matematik @  1.2.2010,  12:49 Найти цитируемый пост)
в другом случае сервер работает в той кодировке на что настроен 

Я понял, т.е. сервером нельзя управлять и принудительно нельзя заставить отдавать имена файлов в нужной мне кодировке. Можно лишь узнать кодировку.

Добавлено @ 13:18
Цитата(Matematik @  30.1.2010,  23:11 Найти цитируемый пост)
В девятой версии делал просто

А 10-ую версию (юникодную) на D2007 не устанавливал?

А то мне не могут разработчики внятно ответить.
http://forums2.atozed.com/viewtopic.php?f=7&t=3122

То ли это глюк, то ли есть решение и я что-то забыл.

Это сообщение отредактировал(а) Akella - 1.2.2010, 13:19
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.