Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeichenkodierung mit Problemen

Einklappen

Neue Werbung 2019

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

  • Zeichenkodierung mit Problemen

    Hallo,

    ich versuche einen String mit Umlaut in eine Textdatei zu schreiben und bekomme leider eine falsche Darstellung des Umlauts.
    Mit fwrite wird ein utf-8-codierter String reingeschrieben.
    mb_detect_encoding auf diesen String ergibt UTF-8, also habe ich versucht, den String in ISO 8859-1 oder 8859-15 umzuwandeln. Dafür habe ich folgendes versucht:

    mb_convert_encoding($string, 'ISO-8859-1');
    mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8');
    mb_convert_encoding($string, 'ISO-8859-1', mb_detect_encoding($string));

    Jedes Mal ergibt danach ein mb_detect_encoding($string); nur UTF-8
    Liegt es daran, dass die ISO-Kodierung eine Teilmenge von UTF-8 ist?

    Wie bekomme ich die Umlaute korrekt im Text-File dargestellt?

    Danke im Voraus für jede Hilfe!

    EDIT: mittlerweile habe ich die komplette Konventierung mit mb_convert_encoding entfernt und wenn ich utf8_decode benutze, sehe ich im Log die richtige Ausgabe der Umlaute, in der Textdatei stehen sie aber nach wie vor falsch drin.


  • #2
    Eine 100% Analyse welcher Zeichensatz für einen string benutzt wurde ist nicht immer möglich.
    Einigermaßen brauchbare Ergebnisse für die Unterscheidung ASCII, ISO + UTF-8 liefert mb_detect_encoding mit dieser Liste
    PHP-Code:
    mb_detect_encoding($string,'ASCII, UTF-8, ISO-8859-1'
    Es gibt auch nicht für jedes UTF-8 Zeichen eine gleichwertige Darstellung unter ISO-8859-1. Da mal über iconv nachdenken.
    PHP-Code:
    iconv("UTF-8""ISO-8859-1//TRANSLIT"$string); 
    Hat es einen bestimmten Grund, warum du Text nicht als UTF-8 ablegen möchtest.
    PHP-Klassen auf github

    Kommentar


    • #3
      Auch mit iconv werden die Umlaute im Log richtig dargestellt, aber im Textfile falsch

      Kommentar


      • #4
        Null Informationen was du da treibst. Womit (Code) werden Log + textfile erstellt, wie werden die Resultate betrachtet?
        PHP-Klassen auf github

        Kommentar


        • #5
          Was heißt denn falsch? Mit welcher Anwendung betrachtest du die Textdatei? Wie sehen die Umlaute aus?

          Kommentar


          • #6
            Log: mit printf werden strings während der Abarbeitung des Scripts ausgegeben. Ich kann sie entweder in ein Logfile umleiten oder sie in der Konsole beim aufruf direkt ausgeben. Ich betrachte sie beim Testen in der Konsole. Wenn ich den betr. String mit utf8_decode umgebe, werden die Umlaute in der Konsole richtig dargestellt, sonst nicht.

            Das Text-File, das erzeugt wird sehe ich mir mit vi bzw. vim in der Konsole an. Dort steht z.B. statt "für" ein "für".

            EDIT: wenn ich mein Script mit ... >log.log 2>&1 in die log-Datei umleite, sind die Umlaute dort auch flasch dargestellt. Liegt es am vi?

            Kommentar


            • #7
              Vermutlich, ja.

              Das Encoding kannst du per

              Code:
              :set encoding
              :set filencoding
              anzeigen lassen (weiß nicht, ob nur im vim oder auch im vi) und wenn das nicht auf "utf-8" steht, auch entsprechend setzen:

              - http://stackoverflow.com/questions/1...encoding-utf-8

              Kommentar


              • #8
                Damit deine Umlaute in der Text Datei richtig dargestellt werden, benötigst du ein BOM

                PHP-Code:
                file_put_contents($myFile"\xEF\xBB\xBF".  $content); 
                :cookie: ?

                Kommentar


                • #9
                  Das halte ich für überhaupt keine gute Idee, weil du dann zum Beispiel bei vielen Anwendungen daran denken musst, die BOM wieder abzuschnippeln. Das macht nur Probleme und ist auch nicht wirklich notwendig.

                  Ein Editor, der nicht standardmäßig UTF-8 annimmt, steht halt auf einem Standard von Windows-1252 oder so, was im Grunde seit mindestens 5-10 Jahren nicht wirklich den Realitäten entspricht. (I’m looking at you, notepad.) An der Stelle sollte man das angehen.

                  Kommentar

                  Lädt...
                  X