2018-11-01T15:15:08 GwenDragonIn Perl umkodieren:Code (perl): (dl )1 2# $octets = Bytes, die über Ajax empfangen wurden from_to($octets, "UTF-8", "ISO-8859-15");
2018-11-01T15:15:08 GwenDragonOder du setzt halt gleich bei .ajax() das Charset über Settings mit dem Parameter contentType.
Quotespecifying another charset will not force the browser to change the encoding.
2018-11-01T15:53:28 hajWie holst Du die Daten denn serverseitig ab?
2018-11-01T15:53:28 hajMöglicherweise kommt Dir da eine Komponente in die Quere, die die Daten schon vorher decodiert.
2018-11-01T15:53:28 hajIch würde also erstens den Content-Type und zweitens den Bytestream ansehen, bei CGI geht das mit my $data = $query->param('POSTDATA');.
2018-11-01T18:11:39 bianca
2018-11-01T18:11:39 bianca2018-11-01T15:53:28 hajMöglicherweise kommt Dir da eine Komponente in die Quere, die die Daten schon vorher decodiert.
Was käme da in Frage?
1 2
my $value = decode_utf8($query->param('value'),Encode::FB_CROAK); print "Da ist ein à drin" if $value =~ /à/;
2018-11-01T18:11:39 bianca2018-11-01T15:53:28 hajIch würde also erstens den Content-Type und zweitens den Bytestream ansehen, bei CGI geht das mit my $data = $query->param('POSTDATA');.
Ist nicht definiert. Was genau heißt das?
2018-11-01T15:53:28 haj0xA0
2018-11-02T06:26:14 bianca2018-11-01T15:53:28 haj0xA0
Bist ein Schatz!! Vielen Dank!
Ich hatte an einer vorgeschalteten Stelle ein ~ s/\xA0/ /g stehen und mir dazu "Unicode in Standard Blank umsetzen" notiert.
Jetzt weiß ich leider nicht mehr wofür das genau notwendig war. Dann muss ich mich jetzt wohl entscheiden, entweder das weg zu lassen oder davor schon das decoding von UTF-8 machen.
2018-11-02T06:26:14 biancaKann ich denn CGI zuverlässig dazu befragen ob der Browser Ajax/UTF-8 oder ISO-8859-1x geschickt hat?
2018-11-02T12:43:46 MuffiWas wir in der Vergangenheit öfter mal gemacht haben ist ein hidden Feld im Formular, das einen festen Umlaut schickt.
Dann kannst du je nachdem, wie der Umlaut ankommt entscheiden, wie er geschickt wurde.
2018-11-02T14:03:09 MuffiHmm, welche Kodierung?
<Input type="hidden" ... value="ä">
2018-11-02T14:49:46 MuffiAchso - ja.
Deswegen ja das
Code: (dl )<Input type="hidden" ... value="ä">
An dem, was dann ankommt sieht man welche Kodierung der Browser benutzt hat.
Quotedas 0xA0 "sieht man nicht", weil es das non-breaking-space ist.
2018-11-01T16:36:31 rostiWozu umkodieren
2018-11-01T16:36:31 rostiWenn Ajax die Kodierung nicht verändern soll, sondern mit derselben Kodierung senden soll wie die Seite ausgeliefert wurde, benutze die JS Funktion escape(input).
2018-11-01T19:33:32 rostiEine Dauerlösung für was?
2018-11-01T19:33:32 rostiSchreib mal auf, was gegeben ist
2018-11-01T19:33:32 rostiund was Du eigentlich willst.
2018-11-01T19:33:32 rostiDann finden wir auch eine Dauerlösung und zwar 100%ig!
2018-11-01T20:51:02 biancaDas ist eine Webseite auf der mittels JS eine <form...> erzeugt und in das DOM eingehängt wird. Das wird dann mittels FormData() abgegriffen und das damit erzeugte Objekt wird mittels jQuery's .ajax() zum Server gesendet.
2018-11-01T21:21:06 hajMan kann [...] im AJAX-Aufruf (mit dem Setting contentType) das Encoding vorschreiben.
Quotedass die Daten via Ajax im Perlscript genauso ankommen wie beim Senden mittels <form...>
2018-11-02T06:10:52 rostiGanz einfach: Sorge für eine einheitliche Zeichenkodierung UTF-8. D.h., daß Du die Seite in UTF-8 ausliefern musst.
2018-11-02T06:10:52 rostiPS: Die ISO-8859-x umfasst 16 unterschiedliche Kodierungen! D.h., daß auf einunddemselben Byte 16 verschiedene Zeichen abgebildet werden können!
QuoteDu bist der Mann mit dem Holzhammer, was? :)
2018-11-02T06:39:30 rostiDeine Lösung heißt UTF-8. Was Du ja auch wolltest: Eine dauerhafte Lösung!
2018-11-02T07:13:46 rostiDeine Regex Lösung ist einfach nur Pfusch!
2018-11-02T08:04:53 bianca2018-11-02T07:13:46 rostiDeine Regex Lösung ist einfach nur Pfusch!
Dein Kommentar ist einfach nur destruktiv!
2018-11-02T06:58:21 biancaDie Browser, die ich kenne, halten sich bei Formularen an das, was ihnen als accept_charset vorgegeben wurde und codieren den Text dementsprechend. Das muss nicht das gleiche Encoding sein, in dem das Formular selbst abgefasst wurde: Du kannst Deine Webseite in ISO-8859-15 belassen und trotzdem Formulareingaben in UTF-8 verarbeiten. <form action="..." accept-charset="utf-8">2018-11-02T06:39:30 rostiDeine Lösung heißt UTF-8. Was Du ja auch wolltest: Eine dauerhafte Lösung!
Nein ist es nicht, weil die Browser über <form...> anders senden. Und das muss bei mir durch den selben Perlcode.
2018-11-02T06:58:21 biancaHm... Das ist aber dann doch wieder eher ein Workaround als eine Dauerlösung. UTF-8 hat ein paar legale zwei-Byte-Zeichen, deren zweites Byte ein A0 ist, im europäischen Umfeld gibt es das Š ("\xc5\xa0"). Das gibt es auch in ISO-8859-15 ("\xA6"), aber beispielsweise nicht in ISO-8859-1. Wir sprechen uns dann wieder, wenn Du Dich wunderst, warum ein Š in ein Å umgewandelt wird.Ich habe jetzt meine vorgeschaltete Regex geändert von ~ s/\xA0/ /g in ~ s/([^\xC3]?+)\xA0/$1 /g. Schauen wir mal, wann ich darüber stolpere.
1 2 3 4 5 6 7 8 9 10
# Codepoint zu Bytewertigkeiten # berechnen für UTF-8 sub cpoint2bints{ my $self = shift; my $cp = shift; my $utf8 = pack "U", $cp; use bytes; unpack "C*", $utf8; }
2018-11-02T07:47:41 MuffiBringt wohl nix.
2018-11-02T08:09:30 bianca2018-11-02T07:47:41 MuffiBringt wohl nix.
Würde es, wenn ich im Perlscript darauf Zugriff hätte. Dann könnte das Script zwischen Request via <form...> und via AJAX entscheiden und ich würde bei AJAX pauschal aus UTF-8 decodieren. Aber wie komme ich an diesen Header?