Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Ftp gönderilen dosyada tr karakter sorunu
#1
Exclamation 
Merhaba,

basit ftp upload prg. yazdım. windows serverda da bir ftp miz var. buraya teknik resimleri pdf formatında atıyoruz... tabletten açıp gerekli işlemleri yapıyorlar yani ortada gezen kağıtlar yok.

FTP1.Put(OpenDialog1.FileName ,ExtractFileName(OpenDialog1.FileName),true);

şeklinde gönderme ok. ama server tarafında dosya ismi

152.61.005 BEPCO 513799 PİM 29MM  25,50MM  177,50MMşĞü.PDF
şeklinde oluyor....

ftp ayarları değiştirdim.. utf8encode vb şeyleri denedim başaramadım.  bu konuda yardımlarınızı bekliyorum.
Cevapla
#2
Merhaba tam da bugün parametrik olarak UTF8 dönüşümleriyle uğraşıyordum. 
Web sitesi üzerinden toplu mail atmak için bir proje ile meşguldüm. Unicode konu, isim ve mail içeriği desteği için lazım oldu.

Sıcağı sıcağına yazayım.

Dosyanın adı tam olarak aşağıdaki şekilde miydi ?
152.61.005 BEPCO 513799 PİM 29MM  25,50MM  177,50MMşĞü.PDF

Bunu çözümleyen kod şu şekilde. Kendi adıma çözümüm bu oldu en azından.

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  LName : String;
  LByte : TBytes;
begin
  LName := '152.61.005 BEPCO 513799 PİM 29MM  25,50MM  177,50MMşĞü.PDF';
  LByte := System.SysUtils.TEncoding.ANSI.GetBytes( LName );
  With TStringStream.Create( '', TEncoding.UTF8 ) do try
    Write( LByte, Length(LByte) );
    LName := DataString;
  finally
    Free;
  end;
  InputBox('','', LName );
end;



Sizin dosya gönderirken yapmanız gereken de sanırım tersi. Benim şu an test etme vaktim yok ama bunun tersini yaparak göndermeyi bir deneyin. Sonucu da buradan bildirin ki lazım olan olursa panoda kalsın.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
Muharrem abi ilgilendiğin için çok teşekkür ederim.
kodlarını denedim abi yine kaydederken tr karakterler gidiyor.Ama dosya işlemleri yaptığım bi yerde bu kodlar çok işime yaradı orayı epey bi sadeleştirdim.
Ftpyi kuran arkadaşla serverdaki ftpyi düzeltme çabalarımızda olmadı.(utf8 seçti codepage filan değiştirdi vb.) 
en son ya windowsun ftp ile ilgi bi problemi var ya da android cihazların tr karakterle bi sorunu var diyebildik.(belkide yoktur  Undecided )

Bu sabaha hatta bu saate kadar girmediğim çıkmadığım site okumadığım ingilizce, rusça kaynak kalmadı.
en son @uparlayan beyin bi soruya verdiği cevap ile ilerledik.zaten denemediğimiz bir bu kalmıştı

http://www.delphican.com/showthread.php?...r#pid14508

Elhasıl: Dosyalardaki tr karakterleri ingi-laz-ca karakterlerle değiştirip o şekilde kaydedince cihazlarda sorun çıkmadı. pek efektif bi çözüm olmasada (-ki sadece tr karater değil çap işareti vb. işaretlerde dosya ismi olarak verilebiliyor) sorun şimdilik halloldu. 

tabi başka bir çözüm önerisi olanlara açığım...

deneme için yazdığım kodları buraya yazıyorum belki bi ihtiyacı olan olur: herhangi bi düzenleme yapmadım olduğu gibi attım.

// UĞUR BEY'İN  DEVŞİRİLMİŞ KODLARI
function LowerCaseTR(aString: String; aBuyukBasHarf: Boolean = True): String;
const
 K = 'IiGgSsUuCcOo_';   // Harfleri böyle sıralanmasının sebebi
 B = 'İıĞğŞşÜüÇçÖöØ';   // Bunların Türkçedeki kullanım sıklıklarına göredir.
var
 I: Integer;                              // Sayaç, indis değişkeni
 X: Integer;                              // Bulunan harfin alfabedeki indis numarası
begin
 Result := aString;
 for I := 1 to Result.Length do begin     // metni harf harf geziyoruz. (Bir rakam ile de karşılaşabiliriz...)
     X := pos(Result[I], B);              // POS, büyük / küçük harfe duyarlıdır (Case Sensitive). Yani büyükse küçüğü, küçükse büyüğü bulmaz.
     if (X > 0) then Result[I] := K[X];   // Bulunan karakter alfabemizde varsa küçüğüyle yer değiştiriyoruz.
 end;
 if (aBuyukBasHarf = True) then
     for I := 1 to Result.Length do begin // Metni harf harf geziyoruz
         X := pos(Result[I], K);
         if (X > 0) then begin
             Result[I] := B[X];
             Exit;                        // İlk harfi büyüttükten sonra çıkıyoruz...
         end;
     end;
end;



// MUAHARREM ABİ'NİN KODLARI FONkSİYON HALİ
function donustur(lname:string):string;
var
LByte : TBytes;
begin
LByte := System.SysUtils.TEncoding.ANSI.GetBytes( LName );
With TStringStream.Create( '', TEncoding.UTF8 ) do
try
   Write( LByte, Length(LByte) );
   LName := DataString;
 finally
   Free;
 end;
result:=lname;
end;

// MUHARREM ABİ'NİN KODLARININ ORJİNALİ
procedure TForm1.BitBtn1Click(Sender: TObject);

var
 LName : String;
 LByte : TBytes;
begin
 LName := '152.61.005 BEPCO 513799 PİM 29MM  25,50MM  177,50MMşĞü.PDF';
 LByte := System.SysUtils.TEncoding.ANSI.GetBytes( LName );
 With TStringStream.Create( '', TEncoding.UTF8 ) do
 try
   Write( LByte, Length(LByte) );
   LName := DataString;
 finally
   Free;
 end;
 InputBox('','', LName );
  label5.Caption:=Lname;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Clear;
if ftp1.connected then ftp1.Disconnect;
with ftp1 do
begin
  Host:=hostedit.Text;
  Username:=kuledit.Text;
  Password:=pasedit.Text;
  Port:=strtoint(portedit.Text);
  Connect;
  Changedir('/otomasyon/pdf');
  List(ListBox1.Items, '', False);

end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if ftp1.Connected then ftp1.Disconnect;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
hedefdosya,kaynakdosya:string;
begin
if OpenDialog1.Execute  then
begin

kaynakdosya:=LowerCaseTR(ExtractFileName(OpenDialog1.FileName),false);//
//kaynakdosya:=UTF8Encode(WideString(ExtractFileName(OpenDialog1.FileName)));  // BENİM DÖNÜŞTÜRME ÇABALARIM
//donustur(ExtractFileName(OpenDialog1.FileName));

showMessage( OpenDialog1.FileName+#13+ExtractFileName(OpenDialog1.FileName)+#13+kaynakdosya);
FTP1.Put(OpenDialog1.FileName,kaynakdosya);


end
end;

procedure TForm1.Button4Click(Sender: TObject);

begin
if SaveDialog1.Execute() then
begin
FTP1.Get(edit5.text,SaveDialog1.FileName ,true);
end;
end;

procedure TForm1.ftp1Status(ASender: TObject; const AStatus: TIdStatus;
 const AStatusText: string);
begin
case  AStatus of
   hsResolving  : memo1.Lines.Add('resolving'); //showmessage('hsResolving');
   hsConnecting: memo1.Lines.Add('bağlanıyor');//showmessage('hsConnecting');
   hsConnected: memo1.Lines.Add('bağlandı');//showmessage('hsConnected');
   hsDisconnecting:memo1.Lines.Add('bağlantı kesiliyor'); //showmessage('hsDisconnecting');
   hsDisconnected: memo1.Lines.Add('bağlantı kesildi');//showmessage('hsDisconnected');
   hsStatusText: memo1.Lines.Add('durum mesajı');//showmessage('hsStatusText');
   ftpTransfer: memo1.Lines.Add('dosya gönderildi');//showmessage('File transfer is complete. ');
   ftpReady: memo1.Lines.Add('transfer hazır');//showmessage('Ready to transfer files ...');
   ftpAborted: memo1.Lines.Add('dosya gönderilemedi');//showmessage('Transfer failed');
 end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
edit5.Text:=ListBox1.Items.Strings[Listbox1.ItemIndex]; //extractfilepath(application.ExeName)+'/'+
end;

end.
Cevapla
#4
Merhaba.

Aslında üçüncü parti bir FTP dosya uygulaması kullandığınızı düşünmemiştim.
Sanki kendi projeniz ile FTP'ye gönderip yine kendi projeniz ile listeleyip, içeriği alıyorsunuz diye düşündüğümden, ulaştığınız dosya isimlerinin bozulmuş olduğundan orijinaline dönüştürmek üzerine bir çözüm olarak paylaşmıştım.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#5
Merhaba @forumcuali

FTP istemcisi için hangi bileşeni kullanıyorsunuz bilmiyorum ama istemcinin sunucuya "benimle UTF8 kodlaması ile konuş" diyebilme imkanınız var diye biliyorum.

Eğer Delphi 10.3 ile birlikte gelen Indy paketini kullanıyorsanız TIdFTP bileşeni ile FTP'ye bağlandıktan hemen sonra ( eğer FTP sunucunuz destekliyor ise ) FTP1.SetCmdOpt('UTF8', 'ON') şeklinde bir direktif verebilirsiniz.

Ayrıca Filezilla ile kendi FTP sunucunuza bağlanıp, sırayla hangi komutları hangi parametrelerle gönderdiğini de loglardan görebilirsiniz.
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
WWW
Cevapla
#6
(02-12-2021, Saat: 17:43)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba.  

Aslında üçüncü parti bir FTP dosya uygulaması kullandığınızı düşünmemiştim.
Sanki kendi projeniz ile FTP'ye gönderip yine kendi projeniz ile listeleyip, içeriği alıyorsunuz diye düşündüğümden, ulaştığınız dosya isimlerinin bozulmuş olduğundan orijinaline dönüştürmek üzerine bir çözüm olarak paylaşmıştım.

(02-12-2021, Saat: 21:57)uparlayan Adlı Kullanıcıdan Alıntı: Merhaba @forumcuali

FTP istemcisi için hangi bileşeni kullanıyorsunuz bilmiyorum ama istemcinin sunucuya "benimle UTF8 kodlaması ile konuş" diyebilme imkanınız var diye biliyorum.

Eğer Delphi 10.3 ile birlikte gelen Indy paketini kullanıyorsanız TIdFTP bileşeni ile FTP'ye bağlandıktan hemen sonra ( eğer FTP sunucunuz destekliyor ise ) FTP1.SetCmdOpt('UTF8', 'ON') şeklinde bir direktif verebilirsiniz.

Ayrıca Filezilla ile kendi FTP sunucunuza bağlanıp, sırayla hangi komutları hangi parametrelerle gönderdiğini de loglardan görebilirsiniz.

Delphi 10.2 var bizde... içindeki TIDftp komponontini kullanıyorum...
10.2 de baktım  FTP1.SetCmdOpt('UTF8', 'ON')  şeklinde verebiliyorum bu şekilde deneyip sonucu yazarım.

FTP1.SetCmdOpt('UTF8', 'ON') ;

ekleyince çok mükemmel çalıştı. teşekkür ederim.
Cevapla
#7
(03-12-2021, Saat: 11:03)forumcuali Adlı Kullanıcıdan Alıntı:
(02-12-2021, Saat: 17:43)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba.  

Aslında üçüncü parti bir FTP dosya uygulaması kullandığınızı düşünmemiştim.
Sanki kendi projeniz ile FTP'ye gönderip yine kendi projeniz ile listeleyip, içeriği alıyorsunuz diye düşündüğümden, ulaştığınız dosya isimlerinin bozulmuş olduğundan orijinaline dönüştürmek üzerine bir çözüm olarak paylaşmıştım.

(02-12-2021, Saat: 21:57)uparlayan Adlı Kullanıcıdan Alıntı: Merhaba @forumcuali

FTP istemcisi için hangi bileşeni kullanıyorsunuz bilmiyorum ama istemcinin sunucuya "benimle UTF8 kodlaması ile konuş" diyebilme imkanınız var diye biliyorum.

Eğer Delphi 10.3 ile birlikte gelen Indy paketini kullanıyorsanız TIdFTP bileşeni ile FTP'ye bağlandıktan hemen sonra ( eğer FTP sunucunuz destekliyor ise ) FTP1.SetCmdOpt('UTF8', 'ON') şeklinde bir direktif verebilirsiniz.

Ayrıca Filezilla ile kendi FTP sunucunuza bağlanıp, sırayla hangi komutları hangi parametrelerle gönderdiğini de loglardan görebilirsiniz.

Delphi 10.2 var bizde... içindeki TIDftp komponontini kullanıyorum...
10.2 de baktım  FTP1.SetCmdOpt('UTF8', 'ON')  şeklinde verebiliyorum bu şekilde deneyip sonucu yazarım.

FTP1.SetCmdOpt('UTF8', 'ON') ;

ekleyince çok mükemmel çalıştı. teşekkür ederim.

Rica ederim, faydalı olduysak ne mutlu
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
WWW
Cevapla
#8
Merhaba

Benzer problem bende de oluştu. Web sitesini .net ile yapmıştım. web sayfalarının ismini DB ye, html sayfasını klasöre kaydediyorum, Menüden urun linki seçildiğinde Master Page içerisine ilgili html sayfasını getiriyorum. 

Sayfayı browserdan http://www.xxxx.com/urun/urun001.html olarak çağırdığımda Türkçe karakterler düzgün geliyor. 
Fakat siteden menu seçilerek (master page) içerisine çağırdığımda Türkçe karakterler hatalı geliyor.

HTML sayfalarını daha önce notepad++ ile hazırlıyordum. Bu sayfalarda problem çıkmıyor.  
Yeni HTML sayfaları (HTML kod ile sayfa oluşturmak zaman aldığı için yenileme istedim) Delphide Devexpress in HTML editörü ile oluşturup FTP ye kaydediyorum.

Nerede hata yapıyorum?

İyi çalışmalar
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Button Renk sorunu CesuR 3 175 2 saat önce
Son Yorum: emailx45
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 544 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
  Delphi SLL kullanım sorunu Bay_Y 12 1.330 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y
  CxGrid Türkçe karakter sorunu mur93 1 362 12-11-2025, Saat: 09:22
Son Yorum: cinarbil
  Java Script ile sayfayı kapatma sorunu MEK 2 1.225 01-03-2025, Saat: 23:16
Son Yorum: mkysoft



Konuyu Okuyanlar: 1 Ziyaretçi