ISO-8859-1 zu UTF-8 konvertieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ISO-8859-1 zu UTF-8 konvertieren

    Hallo zusammen:

    Ich habe einen String der in ISO-8859-1 (LATIN-1) codiert ist und möchte diesen umwandeln UTF-8.

    Leider scheint das nicht zu klappen:

    Hier der Ausgangsstring:
    4055765204275;261270001;
    ;Cannes;6138;Beige;38;261270001-6138-38;199,9;199,9;80;61%
    Baumwolle 39% Polyamid;100% Acetat; ;
    ;FS16;70;116;FS16Jacken & M�ntel;1;EUR;DE;
    ;0,6;Black;Jacken & M�ntel;Stepp & Daune;
    ;0010001001001001;261270001; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
    ; ; ;86


    Hier das Ergebnis:
    4055765204275;261270001; ;Cannes;6138;Beige;38;261270001-6138-38;199,9;199,9;80;61% Baumwolle 39% Polyamid;100% Acetat; ; ;FS16;70;116;FS16Jacken & M�ntel;1;EUR;DE; ;0,6;Black;Jacken & M�ntel;Stepp & Daune; ;0010001001001001;261270001; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;86

    Hier der Code:
    $content = "4055765204275;261270001;
    ;Cannes;6138;Beige;38;261270001-6138-38;199,9;199,9;80;61%
    Baumwolle 39% Polyamid;100% Acetat; ;
    ;FS16;70;116;FS16Jacken & M�ntel;1;EUR;DE;
    ;0,6;Black;Jacken & M�ntel;Stepp & Daune;
    ;0010001001001001;261270001; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
    ; ; ;86 ";
    echo $content;

    $str = utf8_encode($content);

    echo "<hr>" . $str . "<hr>";


    Sieht ganz einfach aus, aber leider werden die Rauten/Fragezeichen nicht in Umlaut ä konvertiert sondern in �

    Ich habe auch mb_convert_encoding() getestet mit dem gleichem inkorrektem Ergebnis...

    Was mache ich falsch?

  • #2
    Offenbar ist der Original-String wegen der Fehler kein ISO-8859-1 sondern etwas anderes. Tippe mal auf eine MS-Office Kodierung.

    Gruß
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Edit: Ne, sorry, der Rest dieses Posts stimmt nicht, aber kann dennoch nicht schaden, mal zu gucken, ob der Header passt.

      Hier fehlt sicherlich erst mal nur der passende Content-Type-Header. Der Browser weiß nicht, dass er da UTF-8 rendern soll.

      PHP-Code:
      header('Content-Type: text/html; charset=UTF-8'); 
      Zuletzt geändert von mermshaus; 30.03.2016, 19:43.

      Kommentar


      • #4
        Das wäre möglich. Ich habe https://nlp.fi.muni.cz/projects/chared/ detekten des Encodings benutzt.

        Falls es ein MS-Office Encoding wäre, wie könnte Ich das feststellen und korrekt konvertieren?

        Kommentar


        • #5
          Ich denke, ich habs.

          Zitat von Kropff
          Offenbar ist der Original-String wegen der Fehler kein ISO-8859-1 sondern etwas anderes.
          Ja. Der Original-String ist schon UTF-8. Das � steht nicht für ein Zeichen, das der Editor nicht anzeigen kann, das � ist tatsächlich der Replacement Character (U+FFFD).

          Da das schon UTF-8 ist, kodierst du den mit utf8_encode dann doppelt.

          Dein String mit den Daten aus deiner Testdatei ist also schon im Eimer. Der enthält keine Informationen mehr, an die Umlaute zu kommen. Hast du die Daten noch anders vorliegen?

          Demo:

          PHP-Code:
          <?php

          header
          ('Content-Type: text/html; charset=UTF-8');

          $replacementCharacterInUtf8 "\xEF\xBF\xBD";

          var_dump(
              
          $replacementCharacterInUtf8,                  // string(3) "�"
              
          utf8_encode($replacementCharacterInUtf8)      // string(6) "�"
          );
          Edit:

          Wenn du die Daten eigentlich in einer eigenen Datei liegen hast, kann es gut sein, dass dir nur dein Quellcode-Editor die Zeichen falsch ersetzt hat, weil er sauberes UTF-8 generieren wollte. In dem Fall probier es mal mit:

          PHP-Code:
          $content file_get_contents(__DIR__ '/the-file.dat');
          $contentUtf8 utf8_encode($content);

          header('Content-Type: text/html; charset=UTF-8');
          echo 
          $contentUtf8
          Zuletzt geändert von mermshaus; 30.03.2016, 20:08.

          Kommentar

          Lädt...
          X