Zeichensatz-Wirrwarr
sven
- https
0 sven0 Sven0 Sven0 Die Lösung ;)
sven
Hi!
Ich habe da ein Problem mit den Zeichensätzen. Ich schicke in einer Webanwendung per HTTP-Request (kein HTML-Form!) einige Daten.
Per JavaScript verarbeite ich die Textdaten, die übertragen werden vor (encodeURIComponent).
Die Übertragung funktioniert wunderbar, nur dass die Sonderzeichen falsch in die Datenbank geschrieben werden. Statt einem Ö steht dann Ã
Auf Serverseite werden die Daten aus dem HTTP-Request in Perl durch das CGI-Modul eingelesen. Soweit müsste noch alles klappen.
Ich nehme an das anschließend eine Verarbeitung notwendig ist?
Soweit ich das sehe werden die Daten ja im Request als ASCII/ANSI kodiert verschickt. Ich nehme an es gibt überhaupt kein Ö im ACSII? Denn es wird ja scheinbar als 2-Byte kodiert (vom encodeURIComponent). Aber was ist das? UTF?
Naja, jedenfalls hab ich auch mal versucht das ohne encodeURIComponent zu verschicken, also als Ö im ISO-8859-1 nehm ich an (Kodierung am Clientsystem und im HTML). Trotzdem wurden wieder 2-Byte am Server geschrieben. Dieselben wie vorher.
Server sollte jedenfalls auch ISO-8859-1 sein (SuSE 8.0).
vielen Dank für Eure Denkanstöße
Sven
Hi!
Die Übertragung funktioniert wunderbar, nur dass die Sonderzeichen falsch in die Datenbank geschrieben werden. Statt einem Ö steht dann Ã
Tja *g* das zweite Zeichen kommt auch hier nicht mehr. Nach dem à ist noch ein Zeichen (lange Bindestrich oder so)
gruß
Sven
Hi!
Einige Dinge, die mir bisher noch aufgefallen sind:
Ich habe sämtliche Parameter, die ich am Server über das CGI-Modul abrufen kann in eine Textdatei am Server gespielt. Da stimmt schon die Kodierung nicht.
Dann hab ich ein Skript zum Einlesen der Felder (egal ob POST oder GET) verwendet. Dasselbe.
so weit
Sven
Hi!
Also, das Problem liegt im Browser. Der IE 6 kodiert UTF-8, was am Server nicht korrekt dekodiert wird.
Ist vielleicht gut gemeint von MS, wenn sie sich mal an einen neuen Standard halten, aber das klappt so halt nicht.
Was ich nicht versteh: Der IE6 lässt sich auch nicht vom META-Tag und der Zeichensatzangabe ISO-8859-1 beeindrucken.
Hat jemand Ideen?
gruß Sven
Hallo Sven,
Was ich nicht versteh: Der IE6 lässt sich auch nicht vom META-Tag und der Zeichensatzangabe ISO-8859-1 beeindrucken.
Bei mir tut er das schon. Mein meta-tag:
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
Sieht deines genau so aus?
Gruß Mia
Hallo Mia!
Merkwürdig. Alles gleich!
Ich habe aber dutzende Male hingesehen bis ich gemerkt habe, dass das zweite %xx nicht ein anderes kodiertes Zeichen ist, sondern noch zum Zeichen davor gehört.
Probier mal: http://www.andrewu.co.uk/tools/uriencoder/default.asp
Wenn ich das Ö kodiere erhalte ich:
%C3%96 bei encodeURI
%D6 bei escape
gruß
sven
Hallo Sven,
Wenn ich das Ö kodiere erhalte ich:
%C3%96 bei encodeURI
%D6 bei escape
genau diese Kombination habe ich ziemlich häufig gesehen. Ich habe dort wo alles andere nicht geholfen hat, explizit kodiert.
Java:
URLEncoder.encode(Text,"ISO-8859-1")
Vielleicht kannst du so etwas versuchen?
Gruß Mia
Hi!
Hier steht übrigens auch ganz explizit, dass es UTF-8 kodiert wird: http://www.js-x.com/javascript/ref_js15/toplev.php
Kann das ein Fehler in SELFHTML sein? Es steht zwar nicht explizit, dass es nicht UTF-8 kodiert würde, aber immerhin, dass diese Kodierfunktion notwendig ist, um Parameter in URLs an CGI-Programme zu schicken.
Nur, dass die armen Dinger kein UTF8 dekodieren!
Oder hab ich immer noch nicht ganz kapiert?
gruß
Sven
Hallo Leute!
Ich habe die Lösung. Ich weiß zwar bei Gott nicht wozu diese encodeURIComponent-Funktion gut ist, aber die war völlig unbrauchbar.
Das CGI-Modul und alle Standard-Skripte dekodieren kein UTF-8. Frag mich wozu dann encodeURIComponent überhaupt gut ist. Für die Zukunft?
Bei mir hat die JS-Funktion escape() jetzt zum Erfolg geführt. Das kommt endlich %xx heraus.
schönen Abend
Sven