Problem mit Jquery/Ajax und Umlauten
Rhodes
- javascript
Hallo zusammen,
in der Javascript Variablen "current_link" wird die URL "http://meinpfad/input.html" abgelegt;
Anschliessend wird der komplette HTML Code dieser Seite per Jquery/AJAX ausgelesen
...
try {
$.get(current_link, function(data){
....
Das funktioniert prima. "data" enthält den kompletten Quellcode der Datei.
Aber es gibt einen Schönheitsfehler. input.html hat als charset ISO-8859-1. Das kann ich nicht ändern, da das eine Intranet-Seite meines Kunden ist.
AJAX arbeitet aber mit UTF-8, so dass nicht codierte deutsche Umlaute innerhalb von input.html als schwarzes Quadrat mit Fragezeichen zurückgeliefert werden.
Ich habe schon gegoogelt und viele Diskussionen zu diesem Thema gefunden, aber keine einzige praktikable Lösung.
Wie gesagt: ich kann die input-Datei nur auslesen und kann weder den Zeichensatz in UTF-8 ändern, noch dort Umlaute in HTML Entities umwandeln.
D.h. ich müsste es irgendwie hinbekommen, dass entweder
* $.get ISO-8859-1 zurückliefert
oder
* die Umlaute in "data" wieder zurückwandeln.
Danke für Eure Tipps
Grüsse
Rhodes
hi,
AJAX arbeitet aber mit UTF-8
das ist Unsinn.
Hotte
Hi
das ist Unsinn.
Hotte
Ich fürchte der einzige Unsinn ist dieses Posting
Hi
das ist Unsinn.
Hotte
Ich fürchte der einzige Unsinn ist dieses Posting
Guck Dir an, was Du mit Ajax überhaupt machen kannst. Ein HTTP-Request und die Response ist nicht an UTF-8 und auch nicht an irgendeine andere Zeichenkodierung gebunden. Das gilt selbstverständlich auch für Ajax.
Auf meiner Site findest Du genügend Beispiele, wie Ajax mit ISO-8859 funktioniert und auch die Erklärung dazu.
Viele Grüße,
Hotte
das ist Unsinn.
Nein, das ist Fakt! Ajax arbeite mit UTF-8, und lässt sich auch nicht umstellen.
@Rhodes
Ich habe das Problem auch gehabt, und so gelöst:
http_request.send(encodeURI(PARAMS));
Ich hoffe das bringt dich ein bisschen weiter...
Ajax arbeite mit UTF-8, und lässt sich auch nicht umstellen.
Mit XMLHttpRequest kann man Daten prinzipiell in beliebigen Zeichenkodierungen empfangen und versenden. Worin genau soll dieser Zwang bestehen?
Ich habe das Problem auch gehabt, und so gelöst:
http_request.send(encodeURI(PARAMS));
Abgesehen davon, dass das offenbar nicht Rhodes' Problem ist (er sprach nicht vom Senden über POST), ist es durchaus möglich, beim POST eine andere URL-Kodierung anzuwenden, die Zeichen nicht in maskierte UTF-8-Bytesequenzen umwandelt. Man kann beliebige URL-kodierte Bytes senden. Wenn man in JS einen Algorithmus hat, wie man vom Unicode-Codepoint zur Bytesequenz kommt, sind andere Kodierungen kein Problem.
Wenn man encodeURI escape verwendet, kann man auch Latin-1 übertragen. Das Problem ist dann vielmehr, dass mit Zeichen außerhalb von Latin-1 blöd umgegangen wird.
Mathias
Wenn man encodeURI escape verwendet, ...
Wenn man *statt* encodeURI escape verwendet, ...
Hans, mein Lieber,
http_request.send(encodeURI(PARAMS));
Ich hoffe das bringt dich ein bisschen weiter...
und ich hoffe, Du weißt was encodeURI macht, gibt mal im Browser ein:
javascript:alert(encodeURI('ü'))
und teste auch mal
javascript:alert(encodeURIComponent('&'))
javascript:alert(encodeURI('&'))
javascript:alert(escape('&'))
und andere Zeichen ...
Hotti
Aber es gibt einen Schönheitsfehler. input.html hat als charset ISO-8859-1. Das kann ich nicht ändern
Das ist kein Problem an sich. Du musst nur dafür sorgen, dass der Server diese Kodierung auch im HTTP-Header namens Content-Type durch den charset-Parameter übermittelt.
AJAX arbeitet aber mit UTF-8
Nein, nicht notwendig. Der Server kann dem Browser als Antwort auf einen XMLHttpRequest Daten in beliebigen Kodierungen senden. Nur wenn der Server nicht die verwendete Kodierung angibt, dann nimmt der Browser als Fallback UTF-8 an.
Ich habe schon gegoogelt und viele Diskussionen zu diesem Thema gefunden, aber keine einzige praktikable Lösung.
Es ist aber sehr einfach. Konfiguriere den Webserver so, dass er die Kodierung angibt. Bei Apache z.B. über AddCharset.
D.h. ich müsste es irgendwie hinbekommen, dass entweder
* $.get ISO-8859-1 zurückliefert
oder* die Umlaute in "data" wieder zurückwandeln.
JavaScript hat mit Kodierungen nichts zu tun. Das passiert auf einer Ebene »vor« JavaScript.
Wenn der Browser den String nicht gemäß UTF-8 dekodieren konnte, sind mit JavaScript-String an den fehlerhaften Stellen bloß Ersetzungszeichen (U+FFFD). Daraus kann man nichts sinnvolles mehr in JS machen.
Im IE schlägt der Ajax-Request bei meinen Tests einfach fehl. jQuery feuert dann den error-Handler. Ein Zugriff auf responseText ist nicht möglich.
Mathias