Wie Filip sagte, Codierung ist kein intrinsisches Attribut einer Datei; Es ist implizit. Wenn Sie also nicht wissen, in welcher Kodierung eine Datei interpretiert werden soll, gibt es keine Möglichkeit, sie zu bestimmen. Das Beste, was Sie tun können, ist eine Vermutung. Dies ist vermutlich das, was Programme wie Notepad ++ tun. Da die tatsächlichen Daten, die Sie gesendet haben, in vielen verschiedenen Codierungen interpretiert werden können, wählt es nur den Kandidaten aus, der am besten gefällt. Für Notepad ++ scheint dies ANSI zu sein (was an sich eine ziemlich ungenaue Klassifizierung ist), während andere Programme auf etwas anderes zurückgreifen.
Der Grund, warum Sie die charset in einem HTTP-Header angeben müssen, ist genau, weil die Datei selbst diese Information nicht enthalten, so muss der Browser darüber informiert werden. Sobald Sie die Datei auf dem Datenträger gespeichert haben, ist diese Information nicht verfügbar.
Wenn die Datei, die Sie dienen werden ein XML-Dokument ist, haben Sie die Möglichkeit, die Codierung Informationen in dem Dokument setzen. Auf diese Weise bleibt es erhalten, nachdem die Datei auf der Festplatte gespeichert wurde. Z.B.wenn Sie mit utf-8, sollten Sie dies am Anfang Ihres Dokuments stellen:
<?xml version="1.0" encoding="utf-8" ?>
Beachten Sie, dass abgesehen von immer die Meta-Informationen über die charset über, Sie müssen auch sicherstellen, dass die Daten, die Sie sind dienen tatsächlich utf-8 codiert. Das ist ungefähr das gleiche Szenario: Sie müssen implizit wissen, wofür Ihre Daten codiert sind. Die Funktion utf8_encode
ist (trotz des Namens) explizit zum Konvertieren von iso-8859-1 in utf-8 gedacht. Wenn Sie es also auf bereits utf-8-codierten Daten verwenden, erhalten Sie es doppelt codiert mit dem Ergebnis von verzerrten Daten.
Zeichensätze sind nicht so kompliziert in sich. Das Problem ist, dass wenn Sie nicht darauf achten, die Dinge in Ordnung zu halten, werden Sie es vermasseln. Wann immer Sie eine Zeichenkette haben, sollten Sie absolut sicher sein, dass Sie wissen, in welcher Kodierung sie sich befindet. Andernfalls ist es keine Zeichenkette - es ist nur ein Blob von Binärdaten.
Ich habe meine Antwort geändert, weil Sie mir die umfassendste Antwort gegeben haben. Danke für all das, es hat meinem Verständnis geholfen! Die Funktion utf8_encode hat mir sehr geholfen, weil ich Daten in der DB gespeichert habe. Danke noch einmal! – Lizard