Sven Rautenberg: Interpunktionszeichen in UTF-8 convertieren

Beitrag lesen

Moin!

Wie kriegst du es denn hin, diese Interpunktionszeichen in ISO-8859-1 zu codieren, wenn sie nicht Bestandteil dieses Codierungsschemas sind?

Ok, sorry das Akut gehört zu ISO-8859-1. IMHO der Gedankenstrich aber nicht. Trotzdem wird mir z.B. das ´ (Akut) im Firefox verschluckt. Im IE wird mir ein Kästchen angezeigt. IMHO gehören Interpunktionszeichen nicht um ISO-8859-1 Zeichenumfang. Deshalb ignoriert sie iconv() und uft_encode().

Ja, das mag ja sein. Aber du mußt doch die Zeichen irgendwie eingegeben und als ISO-8859-1 abgespeichert haben, sonst kannst du sie doch nicht speichern und anzeigen.

Der Gedankenstrich wird im Firefox und im IE fehlerhaft angezeigt. Die Browser haben UFT-8 als verwendeten Zeichensatz gesetzt.

Welches UTF-8-Zeichen ist das? Welches Byte (Zahlenwert) steht in deiner Datei?

Wenn ich es per Hand codiere, funktioniert es!

Was heißt "per Hand codieren"?

Was ich auch nicht ganz verstehe, oder ist es mal wieder an mir vorbei gegangen wie so vieles: Im Quelltext werden mir die Umlaute und Sonderzeichen normal angezeigt, nicht als Unicode.

Es gibt viele Erscheinungsformen von Zeichenfestlegungen. "Unicode" ist als Beschreibung aber denkbar ungeeignet, weil darunter alleine schon eine ganze Handvoll von Codierungsschemata fallen, die alle unterschiedliche Methoden zur Speicherung des gesamten Unicode-Zeichenvorrats enthalten - und nebenbei gibt es dann auch noch die bekannten Zeichen-Untermengen wie Latin1 (bzw. eben ISO-8859-1), die nur eine Teilmenge der Unicode-Zeichen enthalten.

Ist der IE und der Firefox so freundlich und "wandeln" es mir um? Ich sehe also nicht "ö", sondern "ö". Ich meine, früher war das mal alles anders. Da war eh alles besser ;-).

Dein Konstrukt ö ist eine "numerische Zeichenreferenz", fälschlich gerne auch mal "Nummern-Entity" o.ä. genannt.

Die Zahl (egal ob dezimal oder hexadezimal) ist die Unicode-Codepoint. Ein Codepoint ist eine Zuordnung von einer Zahl zu einem Zeichen. Der Codepoint für "64" definiert z.B. das @-Zeichen in den Unicode-Tabellen.

Browser wandeln Entitys (also benannte Zeichen wie ä) und numerische Zeichenreferenzen (@) in die entsprechenden Zeichen um (es erscheint also ein ä und ein @-Zeichen).

Die numerischen Zeichenreferenzen können dabei unabhängig von der aktuellen Zeichencodierung jederzeit jedes existierende Unicode-Zeichen referenzieren. Du kannst damit also auch in einem ISO-8859-1-Text mittendrin Chinesisch schreiben, oder das Euro-Zeichen einfügen (das in ISO-8859-1 auch nicht enthalten ist).

An diesen Möglichkeiten hat sich seit Bestehen von HTML aber nie etwas geändert. Lediglich war Unicode früher noch nicht so verbreitet, genauso wie das Internet hauptsächlich nur im englischsprachigen Kulturraum verbreitet war, und deshalb Zeichencodierungsprobleme fast nie auftraten, weil die für Englisch notwendigen Zeichen in nahezu jedem Codierungsschema vorkommen und auch immer mit den gleichen Zahlenwerten codiert werden.

- Sven Rautenberg

--
My sssignature, my preciousssss!