sven: Zeichensatz-Wirrwarr

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

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

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

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

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

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

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

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

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