Einzelnen Beitrag anzeigen

Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#32

AW: Indy HTTPClient Post umlaute

  Alt 21. Apr 2024, 12:05
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?
Michael Gasser

Geändert von Michael II (21. Apr 2024 um 12:13 Uhr)
  Mit Zitat antworten Zitat