Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.589 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Indy HTTPClient Post umlaute

  Alt 21. Apr 2024, 02:30
Nun habe ich doch kurz libretranslate in einer meiner Linux-VMs installiert. Es stimmt, die Variante mit TStrings funktioniert nicht so wie erwartet. Das bekommt man zwar hin, aber einfacher ist es so:
Delphi-Quellcode:
function Translate(const AText, ASourceLang, ADestLang, AApiKey: string): string;
var
  Http: TIdHTTP;
  Data: TStream;
begin
  Http := TIdHTTP.Create(nil);
  try
    Data := TStringStream.Create(UTF8Encode(
      Format('{"q": "%s","source": "%s", "target": "%s", "api_key": "%s"}', [AText, ASourceLang, ADestLang, AApiKey])));
    try
      Http.Request.ContentType := 'application/json';
      Result := UTF8Decode(Http.Post('http://192.168.119.53:5000/translate', Data));
    finally
      Data.Free;
    end;
  finally
    Http.Free;
  end;
end;

  ShowMessage(Translate('Länge 8,5 cm', 'de', 'en', ''));
  ShowMessage(Translate('Length 8,5 cm', 'en', 'de', ''));
Das funktioniert unter Delphi 2007 und z.B. Delphi 11 analog. Genauso klappt es auch mit ICS. Manuell in den Stream schreiben ist auch dort nicht notwendig.

Wenn du Streams verwendest, funktioniert es mit Indy und ICS identisch.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat