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?