Wozu Unicode?
Anton
- html
Guten Tag,
mal eine Frage. Warum sollte ein Webmaster Unicode als Schriftsatz wählen? Deutsche haben in der Regel den Deutschen Schriftsatz installiert. Chinesen den Chinesischen, etc, etc.
Wie wahrscheinlich ist es, dass sich ein Iraner eine Chinesische Seite anguckt ? Unicode ist doch nur dazu, wenn man mehrer Sprachen auf einer Seite verwenden möchte oder ?
Danke
mal eine Frage. Warum sollte ein Webmaster Unicode als Schriftsatz wählen?
Sollte er nicht. Er hat gar keine Wahl; die Entscheidung liegt nicht bei ihm. Es wird immer Unicode verwendet.
Was du meinst, ist die Codierung, d.h. wie die tausende Zeichen angesprochen werden (mit möglichst wenig Bytes).
Wenn du halt zu den paar Zeichen, die fürs Englische ausreichen, zusätzlich nur die deutschen Umlaute und das ß brauchst, kannst du die alle mit einem Byte codieren (ISO 8859-1).
Schreibst du nur kyrillisch oder nur griechisch oder nur hebräisch, gibt's auch da Zeichensätze -- besser gesagt: Codierungen -- der ISO-8859-Familie, so dass ein Byte ausreicht.
Eng wird's, wenn du mehrere Alphabete in einem Dokument verwendest, oder eins mit vielen Zeichen (chinesisch), dann reicht ein Byte, das 256 verschieden Zeichen (incl. Steuerzeichen) codieren kann, nicht aus.
Dafür gibt's dann z.B. UTF-8, worin die ASCII-Zeichen bis 127 mit einem Byte codiert werden, andere Zeichen (auch die deutschen Umlaute) mit zwei Bytes.
Ob die Zeichen beim Benutzer auch angezeicht werden, hängt davon ab, ob dieser die entsprechenden SchriftARTEN installiert hat.
Gruß,
Gunnar
Also, habe ich dann doch im Prinzip recht?
Absoluter Unsinn Unicode zu verwenden ?
Wenn man dagenen Unicode verwendet, braucht man sich aber keine Sorge zumachen, dass ein Besucher evtl. nicht den verwendeten Schriftsatz installiert hat, oder? Das wäre doch der einzige Vorteil.
Wenn ich z.B. als Deutscher nach Malaysia fliege und dort in einem Internetcafe eine deutsche Seite lesen möchte.
Gleich noch eine Frage hinterher.
Wie verhält es sich überhaupt mich xhtml und unicode?
Wenn nun Texte in einer mysql DB gespeichert sind und diese mittels PHP auf einer Seite dargestellt werden. Dann sind die doch im Quelltext nicht als entities gespeichert.
Würden sich utf-8 Dokumente überhaupt validieren lassen ?
Hallo Anton,
Würden sich utf-8 Dokumente überhaupt validieren lassen ?
Sicher, wieso sollten sie nicht.
Bei XHTML wird sogar standardmäßig utf-8 als Kodierung verwendet, da dass die XML Spezifikation vorschreibt.
Nochmal zur Begriffsklärung:
Zeichensatz: Der gesammte Zeichenvorrat, den man im Dokument verwenden kann. Direkt oder indirekt über Zeichenreferenzen.
Kodierung: Die Abbildung von Zeichen auf Bytes und umgekehrt
So sind diese Begriffe jedenfalls in der HTML-Spezifikation festgelegt.
In einem anderen Kontext kann man schon auf eine andere Verwendung stoßen.
Schriftart: Zuordnung von Zeichen zu Symbol.
Ob ein Zeichen dargestellt wird, hat also nichts mit dem Zeichensatz oder gar der Kodierung zu tun, sondern allein mit den installierten Schrifftarten. Ob Du ein deutsches Dokument in iso-... oder utf-8 codierst, ist also gleichgültig.
Unicode zu verwenden, wird eigentlich erst dann interessant, wenn man mehrere Sprachen in einem Dokument verwenden will oder wenn Seiten dynamisch erzeugt und sich nicht auf einen bestimmten Zeichensatz festlegen will.
Speicherst Du Deine Inhalte z.B. in utf-8 in einer Datenbank ab, bekommst Du keine Schwierigkeiten, wenn Du doch mal irgend ein ungewöhnliches Zeichen benötigst.
Anzumerken wäre vielleicht noch, dass es sich bei Unicode um einen Zeichensatz handelt, und es verschiedene Kodierungen utf-7/8/16(/32) gibt, um Unicodezeichen zu speichern.
Grüße
Daniel
Ob ein Zeichen dargestellt wird, hat also nichts mit dem Zeichensatz oder gar der Kodierung zu tun, sondern allein mit den installierten Schrifftarten.
Haken tut es nur leider meistens nicht beim ob, sondern sondern beim wie (wie wird Zahl in ein Zeichen umgewandelt).
Ob Du ein deutsches Dokument in iso-... oder utf-8 codierst, ist also gleichgültig.
Vorausgesetzt, derjenige, der dieses Dokument lesen soll, bekommt auch den richtigen Zeichensatz mitgeteilt. Insbesondere Windows-Benutzer neigen dazu, windows-1252-Zeichen als iso-8859-1 ausgeben, was dann angesichts der Zusatzzeichen in windows-1252 (Eurozeichen, Anführungszeichen, Bindestriche) bei Nicht-Windows-Nutzern bisweilen zu Irritationen führt. Das Netz ist voll von Beispielen.
Warum habe ich dann so extreme Probleme, wenn ich diese Funktion auf eine ®-Zeichen anwenden möchte?
function returnHTMLCompatible($input)
{
$reg = "<span style="vertical-align: 0.15em; font-size: 0.9em;">®</span>";
if(is_array($input)) {
foreach($input as $key => $value) {
if (is_array($value)) {
/* recursive call to test whether the array is still multidim or not */
$input[$key] = $this->returnHTMLCompatible($value);
} else {
//$value = htmlspecialchars($value);
$value = ereg_replace('&', "&", $value);
$value = ereg_replace('est®', "est<span style="text-decoration: underline;">c</span>®", $value);
$value = ereg_replace('®', $reg, $value);
$value = nl2br($value);
$input[$key] = $value;
}
}
} else {
$input = ereg_replace('&', "&", $input);
$value = ereg_replace('est®', "est<span style="text-decoration: underline;">c</span>®", $input);
$value = ereg_replace('®', $reg, $input);
$value = nl2br($input);
}
return $input;
}
Wenn ich die Unicode Daten aus der DB durch diese Funktion laufen lasse wird ständig ein schwarzes Quadrat plus das ® Zeichen ausgegeben. Vorher war alles in der DB Western Latin und da hat er das ® Zeichen schön höhergestellt und die Ausgabe sah gut aus.
Warum haut das nicht mehr hin ?
Hallo,
Sicher, wieso sollten sie nicht.
Wenn ich nun diesen Text in der utf-8 kodierten DB gespeichert habe:
"Anton sagte zu dem Schüler: 3 ist kleiner als 4. Geschrieben wird das 3<4 ..."
Wir der Validator dann nicht einen Fehler ausspucken ? Da "<" doch Teil eines html tags ist?
Zeichensatz: Der gesammte Zeichenvorrat, den man im Dokument verwenden kann. Direkt oder indirekt über Zeichenreferenzen.
Also wenn ich mir das als Menge vorstelle. Ein Kreis mit ganz vielen Elementen drin. Im Falle von Unicode alle Zeichen, die es auf der Welt gibt. Im Falle von Western Latin ist der Kreis kleiner. Also die Lateinischen und noch ein paar andere?
Kodierung: Die Abbildung von Zeichen auf Bytes und umgekehrt
Also von jedem Pfeil aus der Menge auf eine Zahl ? Oder anders bildlich gedacht eine 2-spaltige Tabelle, in einer Tabelle zahlen in der andere das Zeichen des Zeichensatzes ?
Schriftart: Zuordnung von Zeichen zu Symbol.
Wie kan man sich das bildlich vorstellen
Ob ein Zeichen dargestellt wird, hat also nichts mit dem Zeichensatz oder gar der Kodierung zu tun, sondern allein mit den installierten Schrifftarten. Ob Du ein deutsches Dokument in iso-... oder utf-8 codierst, ist also gleichgültig.
Wie kamm man sich die Schriftarten vorstellen. Noch ne Menge mit Symbolen mit Pfeilen zu der Elementen der Menge des Zeichensatzes?
Unicode zu verwenden, wird eigentlich erst dann interessant, wenn man mehrere Sprachen in einem Dokument verwenden will oder wenn Seiten dynamisch erzeugt und sich nicht auf einen bestimmten Zeichensatz festlegen will.
Dachte ich mir und nun ziehe ich es auch durch.
Speicherst Du Deine Inhalte z.B. in utf-8 in einer Datenbank ab, bekommst Du keine Schwierigkeiten, wenn Du doch mal irgend ein ungewöhnliches Zeichen benötigst.
Doch, wenn der Benutzer die Schriftart nicht installiert hat. Oder?
hi,
Sicher, wieso sollten sie nicht.
Wenn ich nun diesen Text in der utf-8 kodierten DB gespeichert habe:
"Anton sagte zu dem Schüler: 3 ist kleiner als 4. Geschrieben wird das 3<4 ..."
Wir der Validator dann nicht einen Fehler ausspucken ? Da "<" doch Teil eines html tags ist?
sicher - aber wo siehst du zwischen der unbedingt vorgeschriebenen kodierung eines solchen HTML-"sonderzeichens", und unicode irgendeinen zusammenhang ...?
gruß,
wahsaga
Hallo Anton,
Wir der Validator dann nicht einen Fehler ausspucken ? Da "<" doch Teil eines html tags ist?
Ja, die Zeichen, die in SGML/XML eine besondere bedeutung haben "'&<> musst Du natürlich immer durch Zeichen oder Entityreferenzen angeben.
Da hilft Dir auch utf-8 nicht, weil das Problem ja in dem Fall nicht ist, dass die Zeichen nicht mit der Kodierung darstellbar sind, sondern dass sie eine spezielle Bedeutung haben.
Also wenn ich mir das als Menge vorstelle. Ein Kreis mit ganz vielen Elementen drin. Im Falle von Unicode alle Zeichen, die es auf der Welt gibt. Im Falle von Western Latin ist der Kreis kleiner. Also die Lateinischen und noch ein paar andere?
Ja.
Also von jedem Pfeil aus der Menge auf eine Zahl ? Oder anders bildlich gedacht eine 2-spaltige Tabelle, in einer Tabelle zahlen in der andere das Zeichen des Zeichensatzes ?
Ja, wobei die Zuordnung natürlich eindeutig sein muss.
Schriftart: Zuordnung von Zeichen zu Symbol.
Wie kann man sich das bildlich vorstellen
Wieder eine Tabelle, die eben diesmal einem Zeichen einem Bildchen zuordnet.
Ein Zeichen ist etwas Abstraktes, um die Zuordnung tatsächlich aufzuschreiben benötigt man natürlich wieder irgend eine Kodierung der Zeichen.
Wenn Du mit Swing (Javaoberfläche) eine Textdatei anzeigen willst, die in iso-... gespeichert ist, wird diese z.B. beim einlesen in utf-16 übersetzt, weil Java utf-16 verwendet um Zeichen zu verarbeiten.
Wenn nun die gewünschte Schriftart die Zeichen in iso-... kodiert, müssen diese erst wieder zurückgewandelt werden, um herauszufinden, welches Zeichen denn nun am Bildschirm auszugeben ist.
Wie kamm man sich die Schriftarten vorstellen. Noch ne Menge mit Symbolen mit Pfeilen zu der Elementen der Menge des Zeichensatzes?
Ja
Doch, wenn der Benutzer die Schriftart nicht installiert hat. Oder?
Ja, ich meinte natürlich, dass Du mit der Speicherung dann kein Problem hast.
Wenn das Zeichen beim Benutzer nicht darstellbar ist, kannst Du natürlich nichts machen.
Grüße
Daniel
Wenn ich nun diesen Text in der utf-8 kodierten DB gespeichert habe:
Anton,
Was ist der DB steht, ist dem Validator egal. Den intereesiert nur, was als HTML rausgeht.
"Anton sagte zu dem Schüler: 3 ist kleiner als 4. Geschrieben wird das 3<4 ..."
Wir der Validator dann nicht einen Fehler ausspucken ? Da "<" doch Teil eines html tags ist?
Wird er. Das < muss maskiert werden: http://de.selfhtml.org/html/allgemein/zeichen.htm#html_eigene
Und das ist unabhängig davon, ob du in UTF-8, ISO 8859-1 oder sonstwas codierst.
Also wenn ich mir das als Menge vorstelle. Ein Kreis mit ganz vielen Elementen drin. Im Falle von Unicode alle Zeichen, die es auf der Welt gibt. Im Falle von Western Latin ist der Kreis kleiner. Also die Lateinischen und noch ein paar andere?
Genau. Die mit ISO 8859-1 codierbaren Zeichen sind eine Teilmenge des Unicode-Zeichensatzes. Deren Mächtigkeit ist 256, wobei das nicht alles darstellbare Zeichen sind, sondern auch Steuerzeichen.
Die mit ISO 8859-2 codierbaren Zeichen sind eine andere Teilmenge (der Mächtigkeit 256) des Unicode-Zeichensatzes. Ebenso -3, -4, ...
Die Schnittmenge dieser Teilmengen ist nicht leer, sondern umfasst auf jeden Fall die Zeichen von 0 bis 127. http://de.selfhtml.org/inter/zeichensaetze.htm
Kodierung: Die Abbildung von Zeichen auf Bytes und umgekehrt
Umgekehrt wär dann Decodierung.
Also von jedem Pfeil aus der Menge auf eine Zahl ? Oder anders bildlich gedacht eine 2-spaltige Tabelle, in einer Tabelle zahlen in der andere das Zeichen des Zeichensatzes ?
Ja.
Schriftart: Zuordnung von Zeichen zu Symbol.
Wie kan man sich das bildlich vorstellen
http://de.selfhtml.org/inter/sprache.htm#schriftarten, am besten mal die ganze Seite lesen.
Gunnar
Moin!
Unicode zu verwenden, wird eigentlich erst dann interessant, wenn man mehrere Sprachen in einem Dokument verwenden will oder wenn Seiten dynamisch erzeugt und sich nicht auf einen bestimmten Zeichensatz festlegen will.
Speicherst Du Deine Inhalte z.B. in utf-8 in einer Datenbank ab, bekommst Du keine Schwierigkeiten, wenn Du doch mal irgend ein ungewöhnliches Zeichen benötigst.
Deine Ausführungen sind in der Theorie richtig - in der Praxis ist es aber, bedingt durch real existierende Browser, alles viel grausamer.
Dieses Forum hier wird unzweifelhaft primär in der deutschen Sprache genutzt. Dennoch verwenden wir jetzt UTF-8. Warum? Weil die Browser zu blöde sind, mit dem Eurozeichen ordentlich umzugehen.
Das Problem ist nämlich: In "Latin 1" bzw. ISO-8859-1 ist das Eurozeichen nicht definiert. Man kann es also nicht übermitteln, selbst wenn der Benutzer es eingegeben hat (was heutzutage ja keine Schwierigkeit ist). Erst ISO-8859-15 kennt das Eurozeichen.
Die Browser verhalten sich beim Formularversand aber leider ziemlich häßlich. Entweder werden uncodierbare Zeichen als Zahlen-Entity übermittelt, oder das Zeichen wird in ein Fragezeichen umgewandelt, oder es wird entgegen den Anweisungen im <form> einfach eine Windows-Codierung genutzt, bei der das Eurozeichen in einem verglichen mit ISO-8859 illegalen Bytebereich liegt.
Unterm Strich hat man bei Nichtverwendung von UTF-8 dermaßen viele Probleme durch Browser, was die Übermittlung auch von "gewöhnlichen" Zeichen angeht, dass UTF-8 wirklich der einzige Ausweg ist.
- Sven Rautenberg
Hi,
Dieses Forum hier wird unzweifelhaft primär in der deutschen Sprache genutzt. Dennoch verwenden wir jetzt UTF-8. Warum? Weil die Browser zu blöde sind, mit dem Eurozeichen ordentlich umzugehen.
Hier kommt ein Euro-Zeichen nach dem Doppelpunkt: Siehst Du es? Ich nicht ...
cu,
Andreas
Moin!
Dieses Forum hier wird unzweifelhaft primär in der deutschen Sprache genutzt. Dennoch verwenden wir jetzt UTF-8. Warum? Weil die Browser zu blöde sind, mit dem Eurozeichen ordentlich umzugehen.
Hier kommt ein Euro-Zeichen nach dem Doppelpunkt: Siehst Du es? Ich nicht ...
Hm... du hast natürlich Recht. Das Meta-Tag spricht von ISO-8859-1, der HTTP-Header auch - und das Eurozeichen fehlt.
Entweder ist dieses Problem von CK noch nicht vollständig behoben, oder er hat es erst im nächsten Release vor.
Vielleicht habe ich mir auch nur alles eingebildet...
- Sven Rautenberg
Anton,
Und ich hatte mir so 'ne Mühe gegeben, mich verständlich auszudrückenn... :-(
Absoluter Unsinn Unicode zu verwenden ?
Du verwendest Unicode, ob du willst oder nicht.
Du hast nur die Wahl der Codierung: z.B. ISO 8859-1 oder UTF-8 (was nicht dasselbe ist wie Unicode).
Wenn man dagenen [UTF-8] verwendet, braucht man sich aber keine Sorge zumachen, dass ein Besucher evtl. nicht den verwendeten Schriftsatz installiert hat, oder?
Doch, wie ich im letzten Absatz von [pref:t=86343&m=510645] schon erwähnt hatte.
Darauf hast du keinen Einfluss, nur der Nutzer. Aber wie du eingangs richtig erwähnt hattest: Wer chinesisch lesen will, wird wohl chinesische Schriftarten auf seinem System haben.
Gunnar
Hallo Gunnar,
Du verwendest Unicode, ob du willst oder nicht.
Du hast nur die Wahl der Codierung: z.B. ISO 8859-1 oder UTF-8
Soweit ich weiß, unterscheiden sich die zugewiesenen Zahlenwerte der
entsprechenden Zeichen in ISO 8859-X und Unicode doch etwas, unabhängig von
der Codierung. Oder meinst Du etwas anderes?
Tim
Moin,
Du verwendest Unicode, ob du willst oder nicht.
Du hast nur die Wahl der Codierung: z.B. ISO 8859-1 oder UTF-8Soweit ich weiß, unterscheiden sich die zugewiesenen Zahlenwerte der
entsprechenden Zeichen in ISO 8859-X und Unicode doch etwas, unabhängig von
der Codierung. Oder meinst Du etwas anderes?
Unicode ist ein Zeichensatz, UTF-8 eine Kodierung von Unicodezeichen. ISO-8859-1 beschreibt auch einen Zeichensatz, geht aber auch als Kodierung für eine Untermenge von Unicode durch.
Insofern ist das schon richtig: Wenn man HTML macht, verwendet man immer (naja, wenn man eine halbwegs aktuelle HTML-Version benutzt) Unicode als Zeichensatz, kann sich aber als Kodierung UTF-8 oder ISO-8859-1 oder diverse andere aussuchen.