Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   HTTP Post als ascii mit Umlauten (https://www.delphipraxis.net/197292-http-post-als-ascii-mit-umlauten.html)

markusagb 27. Jul 2018 11:01

HTTP Post als ascii mit Umlauten
 
Hallo zusammen,

vielleicht hat mir jemand einen Tipp, ich muss einen HTTP Post senden - soweit funktioniert das.
Leider werden die Umlaute äöü sowie das ß als ? übertragen. Ich habe schon verschiedenste Konvertierungen versucht mit AnsiString usw... aber das bekomme ich nicht hin :-(

...
idHTTP1.Request.Charset := 'utf-8';

IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
params := TStringList.Create;
MBhttps :='https://199.100.X.X:Port/'
...
Memo1.Lines.add(IdHttp1.Post(MBhttps, params));
...


Danke für eventuelle Ideen wie ich die Stringlist convertieren muss damit die Umlaute richtig in ascii übertragen werden... ach ja, eine Umwandlung in ae oe ue ist hier nicht gewünscht.

Euch nen schönen Tag!

Markus

DieDolly 27. Jul 2018 11:08

AW: HTTP Post als ascii mit Umlauten
 
Ich sende selber über IdHTTP und Post. Auch Umlaute sind kein Problem.
Ich lasse Request.Charset und Request.ContentType komplett weg.
Im Resultat was ich vom Post bekomme sehe ich, dass automatisch Content-Type: text/html und charset="us-ascii" benutzt wird.
Umlaute werden korrekt angezeigt.

Rolf Frei 27. Jul 2018 11:50

AW: HTTP Post als ascii mit Umlauten
 
Leider fehlt in deinem Mustercode der entscheidende Teil. Was machst du mit der Stringlist genau? Du musst die Wetrte vor dem Senden in UTF-8 wandeln, und dann sollte das probemlos gehen. Einfach nur setzen des CharSets ändert deine Parameterwerte nicht automatisch in UTF-8.

markusagb 27. Jul 2018 13:18

AW: HTTP Post als ascii mit Umlauten
 
procedure TForm1.DynamicLabelSend(DynLab:String);
Var
Params: TStringList;
begin
StatusBar1.Panels[4].Text:='HTTPs Dynamic Label post in progress...';
DynLab := StringReplace(DynLab,' & ',' und ',[rfReplaceAll, rfIgnoreCase]);
Edit3.Text:=DynLab;
Memo1.clear;
IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
IdHTTP1.AllowCookies := True;
idHTTP1.Request.Charset := 'utf-8';
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
params := TStringList.Create;
params.Add('login='+DLUser+'&password='+DLPassword +'&type=import&really=1&content='+DynLab);
try
Memo1.Lines.add(IdHttp1.Post(MBhttps, params));
except
end;
params.Free;
StatusBar1.Panels[4].Text:='HTTPs sent';

markusagb 27. Jul 2018 13:22

AW: HTTP Post als ascii mit Umlauten
 
Das was rausgeschickt wird an Content ist DYNLAB, z.B.
DYNLAB:='Aktueller Titel: Über den Wolken'
Wenn ich Charset und Content Type weg lasse wird aus dem Ü trotzdem ein "?"

Delphi.Narium 27. Jul 2018 13:51

AW: HTTP Post als ascii mit Umlauten
 
Welche Delphiversion?

Du schreibst Ascii-Umlaute gehen verloren, arbeitest aber mit UTF-8.

Was denn bitteschön: Ascii oder UTF-8?

Willst Du im Programm Ascii haben, holst aber per Post UTF-8, dann musst Du den erhaltenen Text eben nach Ascii umwandeln.

In Delphi 7 z. B.:
Delphi-Quellcode:
Memo1.Lines.add(Utf8ToAnsi(IdHttp1.Post(MBhttps, params)));

markusagb 27. Jul 2018 15:26

AW: HTTP Post als ascii mit Umlauten
 
Danke für die Antwort,

ich möchte Ascii wegsenden, das was zurück kommt ist erst einmal egal.

Also zum Beispiel im Post als Textnachricht "Ü Ö Ä ß".
Wenn ich den Post mit einem Windows-Browser versende (inkl Login natürlich), dann kommen die Umlaute an,
mit meinem Delphi Indy-Post nur "?".

Version Delphi 10.1 Berlin

freimatz 27. Jul 2018 15:34

AW: HTTP Post als ascii mit Umlauten
 
Schreib doch mal was du unter Ascii verstehst. Bei dem was ich darunter verstehe (siehe Wikipedia) gibt es keine Umlaute.

DieDolly 27. Jul 2018 15:37

AW: HTTP Post als ascii mit Umlauten
 
Ich denke er meint eher ANSI.
Denn im 7 Bit ASCII-Zeichensatz gibt es keine Umlaute. Im 8 Bit ANSI-Zeichensatz schon.

Wenn du tatsächlich ASCII verschicken willst, dann musst die Umlaute Ä = Ae usw. schreiben.
Oder du iterierst durch jeden einzelnen Buchstaben, holst du dir den ordinalen Wert davon mit Ord(Buchstabe) und schickst somit eine Zahlenfolge weg, die so gesehen auch unter ASCII fällt.

markusagb 27. Jul 2018 15:39

AW: HTTP Post als ascii mit Umlauten
 
Unser Broadcast-Provider hat mir mitgeteilt, dass der Post von Umlauten im ASCII Code versendet werden muss, damit die Empfängerseite den richtigen Buchstaben anzeigen kann.
Mit "Hello#20World" Klappt das auch => "Hello World".
Nur die Umlaute nicht...

Hier die Mail:
Der Text muss in ASCII Formatierung URL Encoded übertragen werden.
Beispiel: Hello World  Hello%20World  %20 ist der Hexadezimal
ASCII Code für Leerzeichen


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr.
Seite 1 von 3  1 23      

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