![]() |
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 |
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. |
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.
|
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'; |
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 "?" |
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)));
|
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 |
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.
|
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. |
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 |
AW: HTTP Post als ascii mit Umlauten
<unwichtige frage gelöscht>
|
AW: HTTP Post als ascii mit Umlauten
(Login+)content=ÖÄÜßöäü
im Windows Browser gesendet kommt das auch genau so an: ÖÄÜßöäü Im Delphi Indy-Post gesendet kommt ??????? an |
AW: HTTP Post als ascii mit Umlauten
Zur Erklärung, wir senden den Radiotext vom Studio zum Sender per HTTPs Post.
|
AW: HTTP Post als ascii mit Umlauten
Wenn Du kein UTF-8 verschicken willst, dann solltest Du auch nicht angeben, dass Du
Delphi-Quellcode:
verschickst.
idHTTP1.Request.Charset := 'utf-8';
Versuche es bitte mal mit
Delphi-Quellcode:
Wenn Du einen aktuellen Browser nutzt, dann wird der sicherlich UTF-8 verwenden.
idHTTP1.Request.Charset := 'ISO-8859-1';
Im Zweifelsfalle mal im Quelltext der Webseite, mit der Du die Daten verschickst, nachsehen, ob da ein Zeichensatz angegeben wird und ggfls. welcher. Vermutlich meint die "Gegenseite" (Broadcast-Provider) nicht Ascii, sondern ![]() Aus Ü Ä Ö ß wird dann %C3%9C%20%C3%84%20%C3%96%20%C3%9F. Aus Hällo Wörld wird dann H%C3%A4llo%20W%C3%B6rld. 'ne passende Funktion müsste bei den Indys irgendwo dabei sein. |
AW: HTTP Post als ascii mit Umlauten
TOP Delphi.Narium!!
Einen Schritt weiter. Also es ist egal ob UTF oder ISO im Charset steht, wenn ich Deine "H%C3%A4llo%20W%C3%B6rld" versende zeigt das Radio jetzt auch endlich das "ä" an :-))) Wie kriege ich jetzt noch meinen String in das Format, mit StringReplace('ä','%C3%A4') oder gibts da etwas anderes? |
AW: HTTP Post als ascii mit Umlauten
|
AW: HTTP Post als ascii mit Umlauten
Such mal nach
![]()
Delphi-Quellcode:
params.Add('login='+DLUser+'&password='+DLPassword +'&type=import&really=1&content='+TIdURI.URLEncode(DynLab));
Oder etwas lesbarer:
Delphi-Quellcode:
params.Add(Format('login=%s&password=%s&type=import&really=1&content=%s',[DLUser,DLPassword,TIdURI.URLEncode(DynLab)]));
|
AW: HTTP Post als ascii mit Umlauten
DANKE!!!
Fehlermeldung: "Protokollfeld ist leer" |
AW: HTTP Post als ascii mit Umlauten
Von wem kommt die Fehlermeldung?
Exception in Deinem Programm? Fehlermeldung der Webseite? Suchmaschinen sind Deine Freunde ;-) ![]() ![]() Daraus wird dann (vermutlich):
Delphi-Quellcode:
params.Add(Format('login=%s&password=%s&type=import&really=1&content=%s',[DLUser,DLPassword,TIdURI.URLEncode(Utf8Encode(DynLab))]));
|
AW: HTTP Post als ascii mit Umlauten
Grüß Dich, sorry für die schmalen Angaben - der Indy-Post Befehl löst diese Exception aus.
Leider gibt es keine überladene Version von Format (steht nun da...). Man könnte das mit StringReplace auch machen, ist halt nicht ganz sauber... |
AW: HTTP Post als ascii mit Umlauten
Zeig' bitte mal die Ausgabe von 'nem Beispiel zu DynLab.
Dann dito zu Utf8Encode(DynLab). Und dann noch zu TIdURI.URLEncode(DynLab). sowie TIdURI.URLEncode(Utf8Encode(DynLab)). Dann können wir eventuell sehen, wo es da "klemmt". StringReplace ist da eher eine schlechte Methode, da man ja alles quais von Hand nachimplementieren muss, was die dafür vorgesehenen Methoden eigentlich enthalten sollten. |
AW: HTTP Post als ascii mit Umlauten
Guten Abend,
danke fürs Helfen! var Dynlab: string; Utf8Encode(DynLab) Dynlab:="äöü" => Nach Enkodierung: "???" TIdURI.URLEncode(DynLab) Protokollfeld leer Meldung bei dieser Zeile Exception TIdURI.URLEncode(Utf8Encode(DynLab)) genauso hier, Protokollfeld leer |
AW: HTTP Post als ascii mit Umlauten
Hallo MarkusAGB
ich nutze zwar F.Piettes ICS Overbyte für solche Dinge und nicht Indy, aber ich rate mal, dass du fürs Encoden diese Indy Funktion nutzen kannst:
Delphi-Quellcode:
uses iduri;
TIdUri.ParamsEncode( ... ) Ich hoffe es klappt. Gruss und viel Spass Michael |
AW: HTTP Post als ascii mit Umlauten
Auf die 12, das wars - jetzt funktionierts!
Ganz lieben Dank an Alle, die sich für mich den Kopf zermartert haben, vielen vielen Dank!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz