Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy HTTPClient Post umlaute (https://www.delphipraxis.net/214978-indy-httpclient-post-umlaute.html)

DelTurbo 21. Apr 2024 10:54

AW: Indy HTTPClient Post umlaute
 
Huhu,
das hat dir aber keine ruhe gelassen, gell... :coder2:
Da kenne ich noch einen der weiter gesucht hat. Er kam auf die gleiche Lösung.

Aber wie gesagt ich habe mich entschlossen ICS zu nehmen, zumal die das "neue" SSL unterstützen, deswegen hatte ich da nicht weitergesucht.
Ich dachte ja erst das ich einen "dummen" Fehler mache. Deswegen hatte nach viel googlen gefragt was ich schon wieder falsch mache.

Einen schönen Sonntag wünsche ich dir...

Michael II 21. Apr 2024 11:05

AW: Indy HTTPClient Post umlaute
 
Zitat:

Zitat von jaenicke (Beitrag 1535983)
Wenn du Streams verwendest, funktioniert es mit Indy und ICS identisch.

Schön bestätigst du damit #26 ;-).

Kürzeste Änderung (ohne eine Zeile weiteren Code) wäre gewesen:
Wenn idhttp.post('http://127.0.0.1:5000/translate',hs); nicht funktioniert, dann streame
idhttp.post('http://127.0.0.1:5000/translate',TStringStream.Create(hs.Text, TEncoding.UTF8)));
Bloss frage ich mich bei solchen Konstrukten jeweils immer "wer räumt danach auf" ;-).

Wenn man bei Indy Post mit TStrings verwendet:
Auch Indy verwendet Streams, macht aber dies:
mit Option hoForceEncodePar erwartet Indy, dass man http://www.abc.com/details?par1=val1&par2=val2... postet. Vor dem Streamen werden die Strings durch & getrennt, mit der beim Post angegebenen Kodierung kodiert (wenn keine angegeben verwenden neuere Indys utf8) und dann URL encodiert. Ich nehme an, das ist by design.
ohne Option hoForceEncodePar gibt leider Indy die beim Post angegebene Kodierung nicht weiter. (hier glaube ich eher an einen Bug als an by design) Indy prüft zwar dann, ob eine Kodierung ausgewählt worden ist, diese ist aber halt dann immer nil. Indy prüft bei nil auf GIdDefaultTextEncoding und wählt diese. D.h. wenn man vor dem Post GIdDefaultTextEncoding := encUTF8; setzt, funktioniert idhttp.post('http://127.0.0.1:5000/translate',hs);


jeanicke, ich habe noch eine Frage zu deinem #22. Du verwendest dort UTF8Encode() und fügst den encodierten string einer TStringlist hinzu:
Delphi-Quellcode:
pdata:=TStringList.Create;
    for i:=0 to memoPost.Lines.Count-1 do begin
      pdata.Add(UTF8Encode(..));
Ist das ein neues Feature von Delphi 12? Ich bin immer noch auf dem Stand 11.2 (weil Delphi 11.2 bis auf wenige Macken so super läuft). Und in 11.2 kann TStringList keine utf8strings aufnehmen.

D.h. bei meinem Delphi ist, wenn u : utf8string; s : string; nach u := s, s := u in s wieder ein string drin. Oder anders geschrieben: In meinem Delphi ist pdata.Add(UTFEncode(s)) gleichwertig mit pdata.Add(s). Kann Delphi 12 hier mehr?

jaenicke 21. Apr 2024 12:01

AW: Indy HTTPClient Post umlaute
 
Zitat:

Zitat von Michael II (Beitrag 1535987)
Zitat:

Zitat von jaenicke (Beitrag 1535983)
Wenn du Streams verwendest, funktioniert es mit Indy und ICS identisch.

Schön bestätigst du damit #26 ;-).

Nur dass du den Code offensichtlich nur unter einem neueren Delphi getestet hast. Der funktioniert mit Delphi 2007, um das es hier ging, nicht. Das wollte ich daher kurz ausprobieren, aber auch nicht per IFDEF die neue Funktionalität des TStringStreams verwenden, wenn es so in allen Versionen geht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz