IdFTP.List i polskie znaki diakrytyczne w nazwach.

0

Witam, w RAD Studio 10 mam następujący problem. Na lokalnym dysku jest plik Ąążźćśęół.JPG. Poprzez:

   if OpenDialog1.execute then begin
      try
         ftp.ChangeDir('/'+typ+'/'+nr);    // ftp:TidFtp
         ftp.Put(OpenDialog1.FileName);
         //......

wrzucam plik do właściwego folderu na serwer ftp. Poprzez TotalCommander na serwerze poprawnie widzę nazwę Ąążźćśęół.JPG, sekwencją:

var LS: TStringList;
begin
    LS := TStringList.Create;
    try
      ftp.list(LS);
      LS.Text:=UTF8Decode(LS.Text);
    finally
      LS.Free;
    end;
    //...........

pobieram listę plików i tam zamiast Ąążźćśęół.JPG mam:

"�?�?A1Ao�?A?�?A3A?.JPG"
"'modify=20160104124707;perm=adfrw;size=5878212;type=file;unique=6807UC08D6;UNIX.group=1002;UNIX.mode=0644;UNIX.owner=1002; �?�?A1Ao�?A?�?A3A?.JPG'"

Jednak w przeciwieństwie do Arturze (http://4programmers.net/Forum/Delphi_Pascal/239157-lista_plikow_idftp_-_kodowanie?p=1211018#id1211018)

LS.SaveToFile('PlikiFTP.txt');

nie widzę w notatniku polskich znaków. Natomiast jak użyję:

ftp.get('/'+typ+'/'+nr+'/Ąążźćśęół.JPG','d:\aaaaaa.jpg',true);

plik pobierany jest poprawnie.

Kombinowałem z:

FTP.DefStringEncoding:= IndyTextEncoding_UTF8

ale bez skutku. Bardzo proszę o sugestie co mógłbym zrobić.
Pozdrawiam noworocznie, Andrzej

0

Trudno mi Ciebie zrozumieć. Jak rozumiem, to tego Total Commandera uruchamiasz na swojej maszynie. I pewnie masz na niej zainstalowany Windows, bo nie słyszałem o nie okienkowym Total Commanderze. I pewnie w swoim systemie masz stronę kodową Windows 1250. Przynajmniej tak przypuszczam. Dalej przypuszczam, że w Total Commanderze masz ustawioną jakąś standardową czcionkę systemu operacyjnego. Prawdopodobnie Microsoft Sans Serif. I, to, co widzisz na serwerze, jest tą czcionką wyświetlane. W kodowaniu Twojego systemu. I nic dziwnego, że próba przekodowania napisu (który jest w 1250) z utf8 na Unicode źle się kończy.
No ale może się mylę. W końcu to nie ja siedzę przy Twojej maszynie. I może ona ma ustawione w systemie operacyjnym UTF8, a nie Windows 1250. I dzieją się dziwne rzeczy.

0

Informuję, że problem został rozwiązany.
Trochę do myślenia dał mi sadam2 - dzięki za zadane pytania.
I choć wciąż nie rozumiem "jak to działa", to podam co mi pomogło, więc może komuś też pomoże.
Zamiast przechodzić przez memo czy inne Tstringlist zrobiłem:

ftp.List;
for i:=0 to ftp.DirectoryListing.Count-1 do begin
     with ftp.DirectoryListing do 
        showmessage(Items[i].FileName+' / '+datetimetostr(Items[i].ModifiedDate)+' / '+FormatFloat('#,##0',Items[i].size));
end;

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1