Rainer W.: Führendes Fragezeichen bei UTF-8?

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

  1. 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

    --
    “I got my finger on the trigger / But I don’t know who to trust” (Bruce Springsteen, Devils and Dust)
    1. 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

    2. 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

      1. 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";

        1. 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

          --
          “I got my finger on the trigger / But I don’t know who to trust” (Bruce Springsteen, Devils and Dust)
          1. §6 in [RFC3629]

            Grmpf. Schon das zweite Mal heute. Wohl noch etwas früh für mich.
            Gunnar

            --
            “I got my finger on the trigger / But I don’t know who to trust” (Bruce Springsteen, Devils and Dust)
          2. 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";

        2. 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

          1. Hallo,

            soll also heißen, dass das €-Zeichen einmal so dargestellt werden kann "‚¬" und so "¬‚â"?

            ups, sollte natürlich "€" und "¬‚â" aussehen :-)

            mfg
            Twilo

          2. 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

            --
            “I got my finger on the trigger / But I don’t know who to trust” (Bruce Springsteen, Devils and Dust)