Pete: Umlaute

Hallo,

ich bräuchte mal eure Hilfe in Bezug auf Umlaute:

Ich lese eine String aus einer js-Datei mit Umlauten ein: "Überschrift" und speichere diesen String in einer anderen Variablen. Lasse ich mir nun den String mit alert anzeigen, so bekomme ich nur folgendes:

†berschrift

Wenn ich direkt alert("Überschrift") anzeigen lasse, bekomme
ich

berschrift

also ohne das Ü

Was ist passiert? Warum macht der aus Ü ein  † ? Ich kann jetzt nämlich nicht mehr mein Funktion drüber laufen lassen, die eigentlich alle umlaute ersetzt.

Pete

  1. Hi,

    †berschrift

    versuch mal Unicode:
    alert("2: unicode characters: \u00e4\u00f6\u00fc\u00df");

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Hi,

      †berschrift
      versuch mal Unicode:
      alert("2: unicode characters: \u00e4\u00f6\u00fc\u00df");

      Okay, ich bekomme die normalen Umlaute. Und?

      Bevor ich den String in das HTML-Dockument schreibe durchläuft es folgende Funktion:

      function deleteUmlaute(curText) {
       if (curText == "") return "";
       var result = curText;
       alert("deleteUmlaute: "+curText);
       result=result.replace(/\u00fc/g, "ü");
       result=result.replace(/\u00f6/g, "ö");
       result=result.replace(/\u00e4/g, "ä");
       result=result.replace(/\u00dc/g, "Ü");
       result=result.replace(/\u00d6/g, "Ö");
       result=result.replace(/\u00c4/g, "Ä");
       result=result.replace(/\u00df/g, "ß");
       result=result.replace(/ü/g, "ü");
       result=result.replace(/ö/g, "ö");
       result=result.replace(/ä/g, "ä");
       result=result.replace(/Ü/g, "Ü");
       result=result.replace(/Ö/g, "Ö");
       result=result.replace(/Ä/g, "Ä");
       result=result.replace(/ß/g, "ß");
       alert(result);
       return result;
      }

      Dennoch bekomme ich dieses merkwürdige †berschrift. D.h. in meinen Augen, dass der String irgendwo so verändert wurde, dass er durch obige Funktion nicht mehr gefunden wird. Aber an welcher Stelle: Beim Lesen aus der js.Datei, beim übertragen in eine Variable? Woanders?

      Hilfe.......?

      Pete

      1. Inzwischen habe ich rausgefunden, das der Code der da hingeschrieben wird die Entities für ISO 8859-1 sind.

        Ich weiß aber noch nicht warum.

        Pete

        1. Hi,

          Inzwischen habe ich rausgefunden, das der Code der da hingeschrieben wird die Entities für ISO 8859-1 sind.

          Falsch. Die Entities beziehen sich auf den Zeichensatz des Dokumentes. Und der ist bei HTML (egal, welche Kodierung benutzt wird) immer ISO 10646, sprich: Unicode.
          Allerdings sind die ersten 256 Zeichen von Unicode (also die Zeichen mit den Nummern 0x00 bis 0xFF) identisch mit den Zeichen aus ISO-8859-1.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Falsch. Die Entities beziehen sich auf den Zeichensatz des Dokumentes. Und der ist bei HTML (egal, welche Kodierung benutzt wird) immer ISO 10646, sprich: Unicode.
            Allerdings sind die ersten 256 Zeichen von Unicode (also die Zeichen mit den Nummern 0x00 bis 0xFF) identisch mit den Zeichen aus ISO-8859-1.

            Aha...(habe ich das jetzt wirklich verstanden)

            Also, was ich jetz versucht habe ist folgendes:

            var i=0
            switch(text.charCodeAt(i)) {
             case 2440:
                //ersetze das Zeichen durch ein Ü
            }

            Ich durchlaufe den String und tausche alles wieder aus.

            Das funktionirt nur nicht. Wenn ich einen Testdurchlauf mache, bekomme ich überall "ü". Also statt ä oder ö, ü, ß bekomme ich ü.

            Muss ich das verstehen?

            Was kann ich sonst noch tuen. Ich möchte halt in den Strings die Umlaute behalten, da diese später in ein XML-Dokument geschrieben werden.

            Pete

            1. Hi,

              var i=0
              switch(text.charCodeAt(i)) {
              case 2440:
                  //ersetze das Zeichen durch ein Ü
              }
              Ich durchlaufe den String und tausche alles wieder aus.
              Das funktionirt nur nicht. Wenn ich einen Testdurchlauf mache, bekomme ich überall "ü". Also statt ä oder ö, ü, ß bekomme ich ü.
              Muss ich das verstehen?

              Dann hast Du was falsch gemacht.
              Hast Du berücksichtigt, daß nach einem case meist ein break erwünscht ist?

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              1. Dann hast Du was falsch gemacht.

                Das Gefühl habe ich auch :-(

                Hast Du berücksichtigt, daß nach einem case meist ein break erwünscht ist?

                Ja habe ich.

                Mein Problem ist in diesem Zusammenhang, dass ich mir das Ergebnis irgendwie nicht richtig anzeigen lassen kann.

                Testfall wäre z.B:

                var test="üäößÄÜÖ"
                alert(test) //Hier kommen dan lustige Symbole
                alert(replaceUmlaute(test)) //Hier kommt dann nichts mehr in der Anzeige.
                Im Programm selbst habe ich dann eine Funktion, die alle Umlaute vor dem darstellen in einem Frame dann wieder erstetzt:

                z.B. string.replace(//d004/g,ü);

                denn utf-8 code kenne ich jetzt leider nicht und ich bin nicht am meinem Computer.

                Sicherheitshalber habe ich dann noch folgende Ersetzung:

                string.replace(/ü/g,ü)

                Im Normalfall geht das alles. Aber hier jetzt nicht mehr. ICh weiß nicht warum.

                Hast jemand noch eine Idee

                Pete

                cu,
                Andreas

                1. Hi,

                  var test="üäößÄÜÖ"
                  alert(test) //Hier kommen dan lustige Symbole
                  alert(replaceUmlaute(test)) //Hier kommt dann nichts mehr in der Anzeige.

                  Was passiert, wenn Du die Strings ins Dokument schreibst (also ins HTML-Umfeld bringst), statt sie per Javascript-Alert anzeigst?

                  cu,
                  Andreas

                  --
                  Warum nennt sich Andreas hier MudGuard?
                  Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                  1. ?So, endlich wieder am eigenen Computer.

                    ?>> Was passiert, wenn Du die Strings ins Dokument schreibst (also ins HTML-Umfeld bringst), statt sie per Javascript-Alert anzeigst?
                    ??
                    Nichts! :-( Ich bekomme nur 5 Fragezeichen.

                    Zum Verständnis:

                    alert(metaElement.childElements[i].text); // Das ist der eigentliche Text: eigentlich ü ä ö Ü Ä Ö, allerdings bekomme ich nur dieses merkwürdige Kauderwelsch.

                    alert(decode_charFromFile(metaElement.childElements[i].text)); //Hier sollten jetzt Umlaute erzeugt werden. Zu sehen ist kein Zeichen, nicht mal ein komisches

                    top.content.previewarea.document.write(decode_charFromFile(metaElement.childElements[i].text); //Jetzt raus damit in ein dokument. Zu sehen sind 6 Fragezeichen ??????

                    debugPanel(decode_charFromFile(metaElement.childElements[i].text)); //Darstellen es Texes in einer textarea ABER HIER KOMMTS JETZT: Ich hatte hier zum Glück einen Fehler gemacht und folgende Fehlermeldung bekommen:

                    _________________________________________
                    Error: syntax error
                    Source File: file:///debug.html?content='%EF%BF%BD%20%EF%BF%BD%20%EF%BF%BD%20%EF%BF%BD%20%EF%BF%BD%20%EF%BF%BD'
                    Line: 24
                    Source Code:
                    <script type="text/javascript">
                    _________________________________________

                    Meine decode-Funktion schaut so aus:

                    function decode_charFromFile(filedata) {
                     var i=0;
                     var result = "";
                     while(i<filedata.length) {
                      c = filedata.charCodeAt(i);
                      var replacement = "";
                      switch (filedata.charCodeAt(i)) {
                       case 8224:
                        //alert("8224");
                        replacement = "Ü";
                        break;
                       case 8364:
                        //alert("8364");
                        replacement = "Ä";
                        break;
                       case 8230:
                        //alert("8230");
                        replacement = "Ö";
                        break;
                       case 167:
                        //alert("8230");
                        replacement = "ß";
                        break;
                       case 376:
                        //alert("376");
                        replacement = "ü";
                        break;
                       case 352:
                        //alert("352");
                        replacement = "ä";
                        break;
                       case 353:
                        //alert("353");
                        replacement = "ö";
                        break;
                       default:
                        replacement = filedata.charAt(i);
                        break;
                      }
                      result += replacement;
                      i++;
                     }
                     //alert("i="+i);
                     return result;
                    }

                    Vielleicht kann mir jetzt jemand helfen? Bitte, bitte, bitte,....

                    Pete

                    1. Ich habe es ?brigens auch mit unescape versucht. Genau(!) die gleichen Ergebnisse!

                      Pete

                2. hi,

                  Testfall wäre z.B:

                  var test="üäößÄÜÖ"
                  alert(test) //Hier kommen dan lustige Symbole
                  alert(replaceUmlaute(test)) //Hier kommt dann nichts mehr in der Anzeige.

                  hast du mal versucht, dir die ergebnisse statt per alert() mal mit document.write() in die seite schreiben zu lassen?

                  gruß,
                  wahsaga

                  --
                  "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
      2. gruss Pete,

        Bevor ich den String in das HTML-Dockument schreibe durchläuft es
        folgende Funktion:

        function deleteUmlaute(curText) {
        if (curText == "") return "";
        var result = curText;
        alert("deleteUmlaute: "+curText);
        result=result.replace(/\u00fc/g, "&uuml;");
        ..
        result=result.replace(/ü/g, "&uuml;");
        ..
        alert(result);
        return result;
        }

        Du beruecksichtigst beim suchen und ersetzen nur unicode-werte
           und die sonderzeichen selber - die zu ersetzenden werte koennten
           aber auch als dezimale bzw. hexadezimale entities in der quelle
           vorkommen.

        ist eine dauerbaustelle - aber reinschauen koennte Dir vielleicht
           weiterhelfen:
           http://www.pseliger.de/testCases/jsApi.String.charCodes.dev.html

        by(t)e by(t)e - peterS. - pseliger@gmx.net

        --
        ie:( fl:) br:> va:| ls:& rl:| n4:} ss:} de:µ js:} zu:]