Wątek zablokowany 2016-01-05 02:17 przez furious programming.

Lista plików IdFTP - kodowanie

0

Witam

Szukam rozwiązania następującego problemu, łączę się poprzez IdFTP (Indy Clients) do serwera FTP, po połączeniu pobieram listę plików które się na nim znajdują, problem polega na tym że nazwy plików zawierają polskie znaki i zamiast tych znaków dostaję krzaki. Gdy plik podglądam w notatniku to wszystko jest OK ale gdy wrzucę go np. do komponentu MEMO to brak polskich znaków. Domyślam się że chodzi o kodowanie jednak nie mam pojęcia jak je zmienić.

var
  LS: TStringList;
begin
  LS := TStringList.Create;
  try
    FTP1.List(LS);
    LS.Sort;
    LS.SaveToFile('PlikiFTP.txt');
 finally
    LS.Free;
  end;

Używam Delphi 7

1

Bo standardowe TMemo w Delphi 7 przyjmue stringi Ansi. Na liście pewnie jest kodpwanie Unicode. Albo utworzysz sobie funkcją WinAPI Edit ze stylem multiline i bez oemconwvert. A później ustaisz teks przez SendMessageW i z PWideCharm.

Albo zainstalujesz sobie paczkę komponentów TNT, które wspierają Unicode. Bo skoro w pliku są krzaki. Można spróbować jeszcze UTF8ToAnsi dla tekstu w stringlistcie. A jeśli to wina samego Indy, to tutaj ogarnąć to może jedynie @kAzek. Podsumowując według mnie najprostsze rozwiązanie to albo przesiadka na Lazarusa albo TNT dla Delphi 7.

0

Raczej nie wina Indy bo przecież do pliku dobrze zapisuje tylko w Memo nie chce się poprawnie wyświetlić co dziwne nie jest bo Delphi 7 nie obsługuje Unicode. Swoją droga u mnie takiego problemu z polskimi znakami nie ma ale może zależy to od ustawień lub systemu serwera z którym się łączy. Chyba że w Indy 9 (takie jest domyślnie w Delphi 7) jest jakiś problem z tym to spróbuj zaktualizować Indy do najnowszej wersji z repozytorium http://www.indyproject.org/sockets/Download/svn.EN.aspx lub normalnie pobrać spakowana paczkę http://indy.fulgan.com/ZIP/

0

jaka wersja Indy?

1

Polecam nowsze Delphi, tam nie mam z tym problemu. A jesli chodzi o Delphi to moze takie cos pomoze.

var
  LS: TStringList;
begin
  LS := TStringList.Create;
  try
    LS.LoadFromFile('1a2a3a.txt');
    LS.Text:=UTF8Decode(LS.Text);
    Memo1.Text := LS.Text;
  finally
    LS.Free;
  end;
0

Faktycznie wystarczyło dorzucić UTF8Decode, dziękuję wszystkim za pomoc.

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