indy ile post sonrası geri dönen veride türkçe Karakter soru

C, C++ ve C++ Builder ile ilgili konuları buraya yazabilirsiniz.
Cevapla
theSinan

indy ile post sonrası geri dönen veride türkçe Karakter soru

Mesaj gönderen theSinan » 02 Oca 2015 11:36

s.a programlama konusunda sorun yaşamayacağım zamanlar ne zaman gelecek
bu acemilik çok kötü bişey

C++ İndy ile websitemdeki php dosyasına bilgiyi post edip ordan geri dönen bilgiyi alıyorum buraya kadar sorun yok
indy ile bilgi gönderirken Büyük Küçük Hark türkçe karakter olsada düzğün gidiyor
ancan geri dönen bilgide Büyük Küçük Türkçe Karakterler ( Ş,Ğ,ü,ö,ç ) de sorun yok
Büyük Küçük Türkçe Karakterler (ğ,Ü,Ö,ö,Ç) olunca iki tane sorun işareti olarak geri dönüyor
php sayfam, veri tabanı, tablom, UTF-8 dir sorun neden kaynalıyordur

Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: indy ile post sonrası geri dönen veride türkçe Karakter

Mesaj gönderen warder » 02 Oca 2015 01:38

En kısa ve öz haliyle sisteminizin karakter kodlamasının utf-8 olmamasından kaynaklanıyor.
Ayrıca İ ve ı karakterlerinde de sorun yaşıyorsunuzdur.
Gelen veriyi karakter dönüşümünü gerçekleştirdiğiniz fonksiyona gönderip kullanabilirsiniz.

Kod: Tümünü seç

UnicodeString TFrmCrypt::TRK(AnsiString sStr) {
	sStr = ReplaceStr(usStr, "Ç", "Ç");
	sStr = ReplaceStr(usStr, "Ä", "Ğ");
	sStr = ReplaceStr(usStr, "Ãœ", "Ü");
	sStr = ReplaceStr(usStr, "Ö", "Ö");
...................gibi diğer dönüşümler......
	Application->ProcessMessages();
	return sStr;
}
sGelenText = TRK(sGelenVeri);
Geçmişte başka çözümlerde denedim, olduda ama en sağlıklısı kontrolun bende olduğu.. yukardaki yani
Hız konusunda endişe etmenize gerek yok.. Büyük verilerle (olağan web sayfaları olarak) hız testlerinde iddialı olabilirsiniz..
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...

theSinan

Re: indy ile post sonrası geri dönen veride türkçe Karakter

Mesaj gönderen theSinan » 03 Oca 2015 04:24

hocam yardımlarını için Teşekkürler
UTF-8 de Gelen Bazı Karakterlerin Degeri Aynı Gözüküyor
convert ettiğimde sorun yaşıyorum

bunlar tükçe karakterler
Ö-Ş-ş-İ-ı-Ğ-ğ-ü-ö-Ç-Ü-ç
bunlar gelen degerler
Ö-Ş-ş-İ-ı-Ğ-ğ-ü-ö-Ç-Ü-ç

gelen degerlere baktığımda
Büyük Ş ile
küçük ş

Büyük Ğ ile
küçük ğ

Büyük Ç ile
küçük Ü

aynı karakter nasıl oluyor acaba
başka nasıl çözül olabilir

Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: indy ile post sonrası geri dönen veride türkçe Karakter

Mesaj gönderen warder » 03 Oca 2015 08:38

Otomatik dönüştürülüyorlar. Olan bu..
Bu dönüşümü sistem bazında, programınıza özel olarak kontrolünüze alırsanız yeni çözümler çıkar.
"locale encoding" anahtar sözcüklerinin c++ yönünden araştırması yararlı olacaktır.
TEncoding araştırması da yeni çözümler sunabilir.
AnsiStringT<1254> değişkenadı; tanımlaması da başka bir çözüm grubuna açılıyor. Ama bu çok başarılı değil.
idHttp nin TStringStream parametresini kullanın.. bu da çözüm sunuyor.

Kod: Tümünü seç

TStringStream * ssStr = new TStringStream();
sAdres = "http://www.biradres.com";
Http->Get(sAdres, ssStr);
sVeri = ssStr->DataString;
Ama gerektiğinde kontrolun bende olduğu ilk mesajımdaki gibi bir çözümü seçiyorum.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...

theSinan

Re: indy ile post sonrası geri dönen veride türkçe Karakter

Mesaj gönderen theSinan » 05 Oca 2015 11:26

Hocam Bende Kontrolün Bende Olmasını İstiyorum
Ancak Bazı Karakterlerin Karşılıkları nasıl aynı gelebiliyor onu anlayamıyorum ki çevirebileyim
Şöyle

Kod: Tümünü seç

String StringCevirme(String sString)
	{

		String Eski[30]={"Ö","Å","Å","Ä°","ı","Ä","Ä","ü","ö","ç","Ã","Ã"};
		String Yeni[30]={"Ö","Ş","ş","İ","ı","Ğ","ğ","ü","ö","Ç","Ü","ç"};


		for(int i=0;i<= 11;i++)
			{
			sString=StringReplace(sString,Eski[i],Yeni[i],TReplaceFlags() << rfReplaceAll);
			}
		  return sString ;
	}
bir fonksiyon yazdım
Post Sonucu Buraya Gönderip Normal Karakterlere Çeviriyorum
ama sonuç istediğim gibi olmuyor

Kod: Tümünü seç

TStringStream * ssStr = new TStringStream(); 
ile
yapmaya çalıştım
yani post sonucu

Kod: Tümünü seç

TStringStream * ssStr = new TStringStream();
ssStr->WriteString(idHTTP->Post("http://www.sitem.com",Gonderdigim_Degerler));

ShowMessagae(ssStr->DataString); // ile bakıyorum yine Sonuç Hüsran :(


ancak

Kod: Tümünü seç

ssStr->Encoding // ile çevirebilirmiyim evet ise nasıl çevirebilirim bilmiyorum

Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: indy ile post sonrası geri dönen veride türkçe Karakter

Mesaj gönderen warder » 05 Oca 2015 05:53

Çevirdiğiniz bazı karakterler benim tespit edip kullandıklarımla örtüşmüyor.
O noktada titiz bir çalışma yapmamışsınız gibi...
StringReplace yerine ReplaceStr yi daha sade ve okunaklı buluyorum.
ReplaceStr zaten rfReplaceAll çalışıyor...

Kod: Tümünü seç

usStr = ReplaceStr(usStr, "ž", "");
usStr = ReplaceStr(usStr, "Å", "Ş");
usStr = ReplaceStr(usStr, "Ä°", "İ");
usStr = ReplaceStr(usStr, "Ç", "Ç");
usStr = ReplaceStr(usStr, "Ä", "Ğ");
usStr = ReplaceStr(usStr, "Ãœ", "Ü");
usStr = ReplaceStr(usStr, "Ö", "Ö");
StringStream için iki kullanım aşağıda.. Sizinkini daha dolaylı ve bu sebepten yavaş buldum.
Kullanım 1 :

Kod: Tümünü seç

TStringList *slGiden = new TStringList();
slGiden->Clear();
slGiden->Values["giden1"] = Bilgi1;
slGiden->Values["giden2"] = Bilgi2;
TStringStream * ssGelen = new TStringStream();
sAdres = "http://www.biradres.com";
Http->Post(sAdres, slGiden ssGelen);
sVeri = ssGelen->DataString;
Kullanım 2 : Bunu hiç test etmedim. Ancak StringStream için TEncoding başvurularının garantili çözüm olduğunu hiç görmedim.
Sanıyorum sisteme tekliften ibaret, Sağlıklı işe yaramıyor.
Bu yüzden kontrol bende olsun istiyorum.

Kod: Tümünü seç

TStringStream * ssGiden = new TStringStream("giden1=Bilgi1&giden2=Bilgi2", TEncoding::UTF8);
TStringStream * ssGelen = new TStringStream();
sAdres = "http://www.biradres.com";
Http->Post(sAdres, ssGiden ssGelen);
sVeri = ssGelen->DataString;
StringStream kullanım yöntemi Türkçe karakter için etkili.. onu test ettim...
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...

theSinan

Re: indy ile post sonrası geri dönen veride türkçe Karakter

Mesaj gönderen theSinan » 05 Oca 2015 06:47

hocam iş TStringStream deymiş
TStringStream ile gelen veriyi alınca
UTF8Decode ettiğim zaman Türkçe Karakter Sorunu Çözüldü

İnşallah bir gün bende burdan yardım edebilecek seviyeye gelirim
Allah Razı Olsun Sizden Çok Şeyler Öğrendim
örnek kod aşağıda

Kod: Tümünü seç

TStringStream  *ssStr = new TStringStream();
TStringList *liste = new TStringList ;
		liste->Add("degisken1=deger1");
                liste->Add("degisken2=deger2");

			  Form1->IdHTTP1->Post("http://www.sitem.com" ,liste,ssStr);



			ShowMessage(UTF8Decode(ssStr->DataString));

Cevapla