Zeddix: If-Schleifen, Javascriptfehler oder Denkfehler?

Hallo Leute,
ich hab mal wieder eine Fragen(was auch sonst).

Ich hab mir gestern mal ein kleines Tool in Javascript geschrieben, Ziel des Tools war es alle Zeichen aufzulisten und die Altkombinationen (altcodes) anzuzeigen.

Kein Problem soweit, denn angeblich soll der Unicode ja Deckungsgleich arbeiten:

Seit HTML 4.0 kann jedes Zeichen aus dem Zeichenvorrat nach ISO
10646 (deckungsgleich mit dem Unicode-Standard) notiert werden.
Beliebige Zeichen aus diesem gewaltigen Zeichenvorrat können
durch eine spezielle numerische Notation erzeugt werden. Das
Schema für solche numerischen Notationen lautet:
&#[x][Nummer];
Beispiele einer Notation in HTML:
α

Naja, nun hab ich den Code gemacht, die ersten 200 Zeichen sind auch deckungsgleich, doch dannach kommt das reine Chaos, hab ich etwas falsch verstanden oder ist da ein Fehler im Script?

<html>
 <head>
  <title>Alt Codes</title>
   <style type="text/css">
    <!--
    body {
    background: #eeeeee;
    border: 1px solid gray;
    }

td.firstcase {
    vertical-align: top;
    margin: 1px;
    }

table.seccase {
    border: 1px solid gray;
    }

td.seccase {
    border: 1px solid gray;
    background: yellow;
    width: 50px;
    text-align: center;
    padding: 5px;

}
    //-->
</style>
<script type="text/javascript">
function changefont () {
  document.getElementById("font").setAttribute("face", document.getElementById("selectTagId").value);
}
function changefont2 () {
  document.getElementById("font").setAttribute("face", document.Formular.Eingabe.value);
}
</script>
 </head>
<body><table><tr><td><h3>Schriftart:</h3></td><td><center><small>Manuelle Eingabe der Schriftart:</small></center></td></tr>
 <tr><td><form>
  <select onchange="changefont()" id="selectTagId">
   <option value="Arial">Arial</option>
   <option value="Courier">Courier</option>
   <option value="Comic Sans MS" id="test">Comic Sans MS</option>
   <option value="Chiller">Chiller</option>
   <option value="Tahoma">Tahoma</option>
   <option value="Verdana">Verdana</option>
  </select>
 </form></td><td>
<form name="Formular">
<input type="text" name="Eingabe" size="20" value="Arial">
<input type="button" value="OK" onclick="changefont2()">
</form>
</td></tr></table><hr><font id="font">
 <table class="firstcase">
  <tr class="firstcase">
   <td class="firstcase">
    <table class="seccase">
<script type="text/javascript"><!--
alert('Willkommen, \ndiese Website erstellet eine Alt-Zeichen Tabelle für dich, in der du sämtliche Zeichen auslesen kannst.\nDu musst den Mauszeiger auf einem Zeichen ruhen lassen, dann wird die erforderliche Tastekombination angezeigt.\nDie Zahlen müssen auf dem Numpad eingeben werden!\nDie Zahlen sollten nicht zu hoch(unter 100.000) werden, sonst kann es mehere Minuten dauern.\n\nViel Erfolg');
//-->
</script>
<script type="text/javascript"><!--
var Ausgabe = "";
var zz = "0";
s = window.prompt("Gib eine Zahle an, bis zu der Alt-Kombination errechnet werden sollen:", "900")
u = window.prompt("Wieviele Zeichen pro Zeile?:", "25")
for (var i = 1; i <= s; i++)
  {
  Ausgabe = '<td class="seccase" title="alt+0' + i + '">&#' + i + ';</td>';
  document.write(Ausgabe);
  zz++;
  if(zz > u)
   {
   document.write('</tr><tr>');
   zz = 0;
   }
  else;
  }

//-->
</script>

</table>
   </td>
  </tr>
 </table></font>
</body></html>

Danke Zeddix
(Sitze nun schon ein paar Stunden am Grübeln)

P.s.: Ich will nicht irgendedetwas hören wie:
-gibt es doch schon
-Mit einer anderen Sprache viel schneller
etc....^^

  1. Hallo,

    Naja, nun hab ich den Code gemacht, die ersten 200 Zeichen sind auch deckungsgleich, doch dannach kommt das reine Chaos, hab ich etwas falsch verstanden oder ist da ein Fehler im Script?

    Was meinst du mit reinem Chaos? Dass andere Zeichen erscheinen, als du erwartet hast?

    Es ist so: Obwohl in Unicode eine Unzahl von Zeichen definiert sind, kann noch lange nicht jeder Font alle darstellen. Wie sollte z.B. chinesisches Zeichen in Courier aussehen?

    Auch hast du keinen Zeichensatz im HTML angegeben, den der Browser benutzen soll, also nimmt er standardmäßig ISO-8859-1, den westeuropäischen Zeichensatz. Dieser hat nur 255 Zeichen.

    Es gibt verschiedene ISO-Zeichensätze, je nach Sprache. Türkisch z.B. hat ganz andere Buchstaben, die in ISO-8859-1 nicht vorkommen.

    Wenn du also Unicode-Zeichen darstellen willst, musst du einen Font benutzen, der diese auch enthält, z.B. "Arial Unicode MS" unter Windows.

    Gruß, Don P

    1. Hallo donp,

      Was meinst du mit reinem Chaos? Dass andere Zeichen erscheinen, als du erwartet hast?

      Es ist so: Obwohl in Unicode eine Unzahl von Zeichen definiert sind, kann noch lange nicht jeder Font alle darstellen. Wie sollte z.B. chinesisches Zeichen in Courier aussehen?

      Naja, er zeigt alle Zeichen an, Massenhaft, aber ab 255 passt es nicht mehr zum Alt-Code(habs nachgeprüft). Doch chinesische Zeichen stellt er auch in Comic Sans MS da und auch Arial etc...

      Wenn du also Unicode-Zeichen darstellen willst, musst du einen Font benutzen, der diese auch enthält, z.B. "Arial Unicode MS" unter Windows.

      Verändert nicht wirklich etwas... Wäre ganz nett wenn du dir das mal selber in eine HTML Datei kopieren würdest(ist ja Kopierfertig), vielleicht findest du ja etwas das nicht stimmt, oder warum auch der Uicode Schriftsatz nicht hilft.... Danke für die schnelle Antwort, vielleicht ist ja bald eine Lösung in Sicht

      MfG Zeddix

      1. echo $begrüßung;

        Was meinst du mit reinem Chaos? Dass andere Zeichen erscheinen, als du erwartet hast?
        Naja, er zeigt alle Zeichen an, Massenhaft, aber ab 255 passt es nicht mehr zum Alt-Code(habs nachgeprüft). Doch chinesische Zeichen stellt er auch in Comic Sans MS da und auch Arial etc...

        Wer ist "er"? Welchen Browser verwendest du? Einige greifen auf einen anderen im System vorhandenen Font zurück, wenn im aktuellen Font keine Darstellung für ein bestimmtes Zeichen vorhanden ist.

        Meine Stichproben zum angezeigten Alt-Code haben (unter Windows) teilweise funktioniert[1], teilweise nicht[2]. Ist es denn definitiv festgelegt, dass der Unicode dem Alt-Code entspricht? Die Unicode-Zeichen 0x80 bis 0x9F sind beispielweise als Kontrollzeichen definiert, Windows und die Browser nehmen aber gern Windows-1252, das diesen Bereich mit Zeichen bestückt hat. Siehe http://de.wikipedia.org/wiki/ISO_8859-1. Diese Zeichen tauchen in Unicode an ganz anderer Position auf.

        [1] im Programm "Zeichentabelle"
        [2] im Windows-Editor

        echo "$verabschiedung $name";

        1. Hallo @all,
          danke das ihr soviele geantwortet haben.

          Wer ist "er"? Welchen Browser verwendest du? Einige greifen auf einen anderen im System vorhandenen Font zurück, wenn im aktuellen Font keine Darstellung für ein bestimmtes Zeichen vorhanden ist.

          Browser ist FF 2.0.0.7 und auch der IE 7.(Windows Xp^^)
          Den Font kann man auswählen wenn man die Seite des kleinen Tools betritt, daran sollte es nun nicht liegen.

          Meine Stichproben zum angezeigten Alt-Code haben (unter Windows) teilweise funktioniert[1], teilweise nicht[2]. Ist es denn definitiv festgelegt, dass der Unicode dem Alt-Code entspricht?

          Also wenn man der Aussage glauben soll auf Selfhtml und ich davon Ausgehe das ich sie Richtig verstanden habe, dann sollte es so sein:

          Seit HTML 4.0 kann jedes Zeichen aus dem Zeichenvorrat nach ISO 10646 (deckungsgleich mit dem Unicode-Standard) notiert werden. Beliebige Zeichen aus diesem gewaltigen Zeichenvorrat können durch eine spezielle numerische Notation erzeugt werden. Das Schema für solche numerischen Notationen lautet:
          &#[x][Nummer];
          Beispiele einer Notation in HTML:
          &#945;
          &#x3B1;
          Das x notieren Sie dann, wenn Sie die Nummer hexadezimal angeben. Bei dezimaler Angabe lassen Sie das x weg. Die Unicode-Nummer eines gewünschten Zeichens können Sie aus den Codetabellen ermitteln (siehe Abschnitt über Seite das Unicode-System).

          [Quelle]http://de.selfhtml.org/html/referenz/zeichen.htm

          Also ich habs nochmal mit dem FF probiert, da stimmen ALLE Alt-Codes, bei dem IE auch, doch sobald man es in eine Leiste eines Programms eingibt die keine Schriftart hat die dieses Zeichen unterstützt, sucht er sich ein Zeichen durch ein Rechenverfahren herraus, dass unter den ersten 256 steht.

          Fazit, die Altcode sind mit der Tabbele Identisch, doch nimmt nicht jedes Programm die gewünschten Altcodes über 256 an.

          Danke nochmal für die Antwort.

          MFG Zeddix

      2. Hallo,

        [...] aber ab 255 passt es nicht mehr zum Alt-Code(habs nachgeprüft).

        Hmmm, bei mir funktioniert es. Alle Zeichen, die dargestellt werden, sind auch die richtigen (FF). Vielleicht hast du ja eine falsche Unicode-Tabelle?

        Es sind aber nicht alle Zeichen im Unicode-Zeichensatz auch wirklich belegt. Es gibt immer wieder große Lücken, wo man noch keine Zeichen definiert hat. Und wie gesagt: Ein Font muss sie auch enthalten.

        Don P

      3. Hello out there!

        Naja, er zeigt alle Zeichen an, Massenhaft, aber ab 255 passt es nicht mehr zum Alt-Code(habs nachgeprüft).

        Ältere Windows-Versionen rechnen modulo 256: Die Eingabe [ALT]+0304 erzeugt dasselbe Zeichen wie [ALT]+0048, nämlich U+0032 '0'. (x32 = 48, 304 = 48 + 256)

        XP nicht: [ALT]+0261 ergibt U+0105 'ą', [ALT]+517 ergibt U+0205 'ȅ'.

        See ya up the road,
        Gunnar

        PS: [ZITAT693, ZITAT938]

        --
        „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
    2. echo $begrüßung;

      Auch hast du keinen Zeichensatz im HTML angegeben, den der Browser benutzen soll, also nimmt er standardmäßig ISO-8859-1, den westeuropäischen Zeichensatz. Dieser hat nur 255 Zeichen.

      Er hat keine Zeichen_kodierung_ für das HTML-Dokument angegeben. Der Zeichen_satz_ für HTML ist generell Unicode. Beachte bitte den Unterschied zwischen Zeichensatz und Zeichenkodierung.

      Der Browser nimmt also ISO-8859-1, oder was immer in seinen Einstellungen eingestellt ist, als Zeichenkodierung an, um das Dokument zu lesen. Wenn darin Entities oder Numerische Zeichenreferenzen (NCR) auftauchen, die auf Zeichen außerhalb der für das Dokument verwendeten Kodierung verweisen, dann stört das den Browser nicht, denn ihm steht der kompletten Unicode-Zeichensatz zur Verfügung. Ein Entity oder eine NCR ist nur eine andere Form der Kodierung. Er kann nun lediglich auf das Problem stoßen, keine Glyphe (Abbild) für das darzustellende Zeichen zu finden.

      Es gibt verschiedene ISO-Zeichensätze, je nach Sprache. Türkisch z.B. hat ganz andere Buchstaben, die in ISO-8859-1 nicht vorkommen.

      Das ist für das Problem nicht weiter relevant, denn der Zeichensatz für HTML ist Unicode.

      echo "$verabschiedung $name";

      1. Hi,

        Er hat keine Zeichen_kodierung_ für das HTML-Dokument angegeben. Der Zeichen_satz_ für HTML ist generell Unicode. Beachte bitte den Unterschied zwischen Zeichensatz und Zeichenkodierung.

        Oops, das war mir so nicht bewusst. Ich dachte wirklich, dass z.B. eine Glyphe Nr. XY auch anders aussieht, wenn man eine andere Kodierung angibt. Aber anscheinend ist das nicht der Fall, interessant.

        Unterschiedliche Fonts machen das aber schon, oder? Ein kyrillischer Arial Font z.B. hat doch andere Glyphen auf den versch. Positionen.

        Don P

        1. echo $begrüßung;

          Unterschiedliche Fonts machen das aber schon, oder? Ein kyrillischer Arial Font z.B. hat doch andere Glyphen auf den versch. Positionen.

          Es gibt verschiedene Dateiformate für Fontdateien. Eins der bekanntesten ist TrueType, sein Nachfolger OpenType. In beiden gibt es eine Tabelle namens cmap. Darin ist eine Zuordnung zwischen den Zeichencodes und der Position einer Glyphe in der Datei hergestellt. Die Zeichencodes können dabei verschiedenen Kodierungen, unter anderem auch Unicode, entsprechen. Und es muss auch nicht zu jedem Code ein Zeichen existieren.

          echo "$verabschiedung $name";

          1. Hallo,

            Seit vielen Jahren arbeite ich mit Truetype- oder Postscript-Fonts und verschiedenen DTP-Programmen. Adobe FrameMaker z.B. nimmt SGML-Daten in ISO-8859-Kodierung, d.h. max. 255 Zeichen bis FFh. Da braucht man für jede Sprache einen entsprechenden Font, sonst kann man mit dem geringen Code-Vorrat nicht kyrillisch, türkisch oder ungarisch schreiben bzw. darstellen.

            Auch wenn man z.B. die Kodierung auf ISO-8859-2 (Zentraleuropa) in einem HTML-Dokument setzt, bekommt man andere Zeichen auch im Browser angezeigt, als mit ISO-8859-1 (Westeuropa). Dass das bei direkter numerischer Angabe im Browser aber nicht gilt, war mir halt neu.

            Gruß, Don P

    3. Hello out there!

      Auch hast du keinen Zeichensatz im HTML angegeben, den der Browser benutzen soll, also nimmt er standardmäßig ISO-8859-1, den westeuropäischen Zeichensatz. Dieser hat nur 255 Zeichen.

      Nein! Der Zeichensatz für HTML-Dokumente ist _immer_ UCS / Unicode.

      Du verwechselst Zeichensatz und Zeichencodierung.

      Wenn keine Zeichencodierung angegeben ist, raten Browser ISO 8859-1. (Allerdings „dürfen Benutzerprogramme keinen Standardwert für den »charset«-Parameter annehmen. […] Benutzerprogramme haben auch üblicherweise eine vom Benutzer einstellbare lokale Standardkodierung, die sie anwenden, wenn andere Indikatoren fehlen.“ [HTML401 §5.2.2])

      Aber wenn im Quelltext '&#x0815;' steht, ist es völlig egal, in welcher Codierung das Dokument vorliegt*, da die Zeichen '&', '#', 'x', '0', '8', '1', '5', ';' allesamt im Bereich bis U+007F (Basic Latin / „ASCII-Zeichen“) liegen.

      Ob das Zeichen U+0815 dann tatsächlich dargestellt wird, hängt freilich davon ab, ob eine etsprechende Schriftart installiert ist.

      See ya up the road,
      Gunnar

      * vorausgesetzt, die Zeichen U+0000 bis U+007F werden durch die Oktettwerte 0 bis 7F codiert.

      --
      „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
    4. Hallo,

      Es ist so: Obwohl in Unicode eine Unzahl von Zeichen definiert sind, kann noch lange nicht jeder Font alle darstellen. Wie sollte z.B. chinesisches Zeichen in Courier aussehen?

      In meinen Browsern wird ein anderer Font für ein Zeichen genommen, wenn in der gewählten Schriftart kein Glyph für das Zeichen existiert. Das geht dann bis zum LastResort. Ist das bei Dir anders?

      Tim

      1. Hallo Tim,

        In meinen Browsern wird ein anderer Font für ein Zeichen genommen, wenn in der gewählten Schriftart kein Glyph für das Zeichen existiert. Das geht dann bis zum LastResort. Ist das bei Dir anders?

        Ja, bei mir ist das anders. Es erscheinen dann Fragezeichen (Windows 2000 Prof., FF 5.0).

        Don P

        1. Hallo,

          Ja, bei mir ist das anders. Es erscheinen dann Fragezeichen (Windows 2000 Prof., FF 5.0).

          ich bin es ja schon gewohnt, dass ich nicht immer ganz auf dem neuesten Stand bin. Aber hab ich wirklich *so* lange geschlafen? Die letzte Firefox-Version, von der ich weiß, war 2.x - wenn du jetzt schon 5.0 hast, fehlt mir da wohl einiges. ;-)

          So long,
           Martin

          --
          Wenn der Computer wirklich alles kann,
          dann kann er mich mal kreuzweise.
          1. Hallo,

            Die letzte Firefox-Version, von der ich weiß, war 2.x - wenn du jetzt schon 5.0 hast, fehlt mir da wohl einiges. ;-)

            Da staunst du, was? Bin eben meiner Zeit weit voraus ;)
            Da steht "Mozilla/5.0" und äh, natürlich "FireFox 2.0.0.7".

            Gruß, Don P