Führendes Fragezeichen bei UTF-8?
Rainer W.
- php
0 Gunnar Bittersmann
Hallo,
mit einem Editor habe ich eine Textdatei als UTF-8 abgespeichert. Wenn ich mir diese Datei mit einem Hexeditor angucke, sehe ich am Anfang drei Zeichen () die nicht zum Inhalt der Datei gehören und im Editor nicht sichtbar sind. Wenn ich die Datei in PHP mit file_get_contents() oder fread() einlese und dann mit echo utf8_decode($buffer) ausgebe, wird am Anfang immer ein normales Fragezeichen (?) mit ausgegeben, das nicht zum Inhalt gehört. Weiß jemand, woher das kommt oder wie man das Problem beheben kann, also nur den tatsächlichen Dateiinhalt bekommt?
Thanx
Rainer
Hi Rainer,
mit einem Editor habe ich eine Textdatei als UTF-8 abgespeichert. Wenn ich mir diese Datei mit einem Hexeditor angucke, sehe ich am Anfang drei Zeichen () die nicht zum Inhalt der Datei gehören und im Editor nicht sichtbar sind.
Das ist das Byte Order Mark (BOM); bei UTF-8 nicht erforderlich.
Sage deinem Editor, dass er bei UTF-8 keins reinschreiben soll. Wenn das nicht geht, nimm einen anderen Editor.
Gruß,
Gunnar
Hi Gunnar,
Sage deinem Editor, dass er bei UTF-8 keins reinschreiben soll. Wenn das nicht geht, nimm einen anderen Editor.
Danke - das wars! Mein Editor hat eine Option dafür, die aber per Default deaktiviert war.
Thanx
Rainer
Hallo,
Das ist das Byte Order Mark (BOM); bei UTF-8 nicht erforderlich.
für was ist das überhaupt gut?
bei google hab ich folgendes gefunden
Eine kurze Bytesequenz, die am Anfang eines Datenstroms auftreten kann. Mithilfe eines BOM läßt sich erkennen, wie die nachfolgenden Oktette zu interpretieren sind. Besonders wichtig bei UTF-16 und UTF-32, da bei diesen Mehr-Oktett-Kodierungen die Reihenfolge der Oktette in einem Datenstrom unterschiedlich sein kann (Big/Little Endian).
damit kann ich aber herzlich wenig anfangen :)
mfg
Twilo
echo $begrüßung;
Das ist das Byte Order Mark (BOM); bei UTF-8 nicht erforderlich.
für was ist das überhaupt gut?
Wenn ein Zeichen mit zwei Bytes (Byte = Oktett) zur Darstellung braucht - z.B. 42 43 - kann es in der Datei als 42 43 oder 43 42 angeordnet stehen. Die BOM gibt an, welche Anordnung verwendet wurde.
echo "$verabschiedung $name";
Hi dedlfix,
Wenn ein Zeichen mit zwei Bytes (Byte = Oktett) zur Darstellung braucht - z.B. 42 43 - kann es in der Datei als 42 43 oder 43 42 angeordnet stehen.
Aber nicht in UTF-8, da ist die Reihenfolge der Oktetts eindeutig festgelegt. Damit ein BOM nicht nötig.
§6 in [[http://www.faqs.org/rfcs/rfc3629.html@title=RFC3629]]
Gruß,
Gunnar
§6 in [RFC3629]
Grmpf. Schon das zweite Mal heute. Wohl noch etwas früh für mich.
Gunnar
echo $begrüßung;
Wenn ein Zeichen mit zwei Bytes (Byte = Oktett) zur Darstellung braucht - z.B. 42 43 - kann es in der Datei als 42 43 oder 43 42 angeordnet stehen.
Aber nicht in UTF-8, da ist die Reihenfolge der Oktetts eindeutig festgelegt. Damit ein BOM nicht nötig.
Ja, das sagtest du bereits. Ich meinte mit meiner Aussage ein einzeln betrachtetes Zeichen aus einer Datei, die für jedes Zeichen zwei Bytes verwendet (wie auch immer diese Codierung nun konkret heißt: UCS-2, UTF-16, was weiß ich :-) lässt sich ja in der Wikipedia nachlesen.)
echo "$verabschiedung $name";
Hallo,
Das ist das Byte Order Mark (BOM); bei UTF-8 nicht erforderlich.
für was ist das überhaupt gut?
Wenn ein Zeichen mit zwei Bytes (Byte = Oktett) zur Darstellung braucht - z.B. 42 43 - kann es in der Datei als 42 43 oder 43 42 angeordnet stehen. Die BOM gibt an, welche Anordnung verwendet wurde.
soll also heißen, dass das €-Zeichen einmal so dargestellt werden kann "‚¬" und so "¬‚â"?
wenn das so ist, hab ich es verstanden :-)
aus den anderen Text ging das irgendwie nicht hervor
mfg
Twilo
Hallo,
soll also heißen, dass das €-Zeichen einmal so dargestellt werden kann "‚¬" und so "¬‚â"?
ups, sollte natürlich "€" und "¬‚â" aussehen :-)
mfg
Twilo
Hi Twilo,
soll also heißen, dass das €-Zeichen einmal so dargestellt werden kann ["€"] und so "¬‚â"?
Weder das eine noch das andere.
Das €-Zeichen U+20AC ist in UTF-8 als Oktettfolge xE2 x82 xAC codiert. In genau deiser Reihenfolge.
"â" ist xE2 in windows-1252 und ISO 8859-1
"‚" ist x82 in windows-1252
"¬" ist xAC in windows-1252 und ISO 8859-1
Deshalb erscheint die Oktettfolge xE2 x82 xAC bei entsprechend angegebener Codierung auch als "€".
wenn das so ist, hab ich es verstanden :-)
Leider nein ...
aus den anderen Text ging das irgendwie nicht hervor
... ich hoffe, dieser ist klarer.
Gruß,
Gunnar