Verständnisfrage: Zeichencodierung - Dateiformate unterschiedlich?

Hallo,

ich bin grade etwas über die Zeichencodierung irritiert, z. B.

oder

Bislang bin ich davon ausgegangen, das die Browser sich nur nach den Angaben im Kopfteil richten und das Textdateien (das sind html-Dateien ja wohl) die Zeichen nur auf eine Art speichern.

Nun habe ich das erste Mal etwas intensiver mit Notepad++ gearbeitet. Dort können unter „Format“ verschiedene Formate für die Datei ausgewählt werden, z. B. ANSI oder UTF-8. Bei anderen Editoren ist mir so eine Möglichkeit noch nicht aufgefallen.

Wenn ich also eine html-Datei im ANSI-Modus erstelle und als Charset UTF-8 in die Kopfdaten eintrage, wird das Format im Notepad++ trotzdem weiterhin als ANSI angezeigt. Ich kann es aber über Notepad++ ins UTF-8-Format umwandeln.

Die Web Developer Toolbar richtet sich wiederum nur nach dem Eintrag im Kopfteil.

Ich habe jetzt mal probehalber eine Datei mit dem einzigen Eintrag

 

im Notepad++ von ANSI nach UTF-8 konvertiert.

Mit dem Charset-Eintrag UTF-8 wird erwartungsgemäß nichts angezeigt. Ändere ich den Eintrag jedoch in ISO-8859-1, wird folgendes im Browser angezeigt:


Demnach scheint es für Dateien unterschiedliche Speicherformate zu geben.

Muß das Dateiformat jeweils zum Charset gewählt und gegebenfalls umgewandelt werden, falls der Charset nachträglich bei einer bestehenden HTML-Datei geändert wird? Dazu habe ich leider keine Informationen gefunden. Auch bei anderen Editoren, z. B. Dreamweaver, finde ich keine entsprechenden Möglichkeiten.

Oder kann ich html-Dateien einfach im ANSI-Format erstellen und mich darauf verlassen, das die Browser sich nur nach dem Charset-Eintrag richten?

Gruss

MrMurphy

Bei Seiten die von einem Server kommen, ist die Kodierungsangabe im HTTP Header entscheidend, dabei wird die meta Angabe ignoriert. Diese wird nur benutzt, wenn du die Datei von der Festplatte als Datei öffnest und anzeigen läßt.

Die Notpadoptionen sind Systemzeichensätze mit denen die Zeichen kodiert sind. Das hat nichts mit irgendwelchen Headerangaben zu tun. Dazu musst du Wissen, wie ein Computer Zeichen speichert, was ASCII ist und wie das mit den Sonderzeichen gehandhabt wird

Das was du nach der Umwandlung in utf-8 siehst ist die BOM, diese ist nur sinnvoll, wenn du eine reine Textdatei hast. HTML Dateien solltest du ohne BOM abspeichern (diese Option gibt es auch im Menü von Notepad++), da diese den IE verwirrt.

Ich gehe mal davon aus, deine Frage richten sich nach einer HTML Datei die von einem Server geliefert werden. Dort ist wie gesagt entscheidend was der Server im HTTP Header als Zeichensatz angibt, die meta Angabe ist unwichtig und kann im Prinzip auch weggelassen werden. Eingestellt wird dies in der Serverkonfiguration und sehen kannst du das z.b. mit diversen Firefox AddOns wie Firebug oder http live headers, aber auch der Kontextmenüeintrag „Seiteniformation anzeigen“ sagt dir die Zeichenkodierung der HTMLSeite. Damit die Zeichen dann auch richtig dargestellt werden können, musst du als Systemzeichensatz ebenfalls den gleichen verwenden, der im http-header angeben wurde. Dann ist alles in Ordnung.

Heutzutage wird meistens utf-8 empfohlen, da du damit nie Probleme wegen irgendwelcher Zeichen bekommen wirst. Es spricht aber nichts dagegen, wenn du sicher nur deutsche Sonderzeichen verwendest, ISO-8859 zu benutzen. Wobei du dort z.b. mit dem € Zeichen aufpassen musst, da es in 8859-1 eigentlich nicht vorkommt.

Einen Überblick wie das ganze funktioiert findest auch bei selfhtml SELFHTML: Internationalisierung

Eine sehr erschöpfende Seite vom W3C dazu:

Die Reihenfolge für das Bestimmen des tatsächlichen Encodings einer Seite wird etwa hier beschrieben: