Rhodes: Problem mit Jquery/Ajax und Umlauten

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

  1. hi,

    AJAX arbeitet aber mit UTF-8

    das ist Unsinn.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Hi

      das ist Unsinn.
      Hotte

      Ich fürchte der einzige Unsinn ist dieses Posting

      1. 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

      2. 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...

        1. 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

          1. Wenn man encodeURI escape verwendet, ...

            Wenn man *statt* encodeURI escape verwendet, ...

        2. 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

          --
          Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  2. 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