Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Umlaute in Textdatei nicht korrekt

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Umlaute in Textdatei nicht korrekt

    Hallo,

    ich bekomme es nicht hin, dass die Umlaute, die in eine .txt Datei geschrieben wurden, auch beim Öffnen im Windows-Explorer richtig angezeigt werden.

    Habe ich beim Speichern etwas nicht beachtet, oder liegt es einfach daran, dass man etwas im Windows-Editor (Win7) einstellen muss?

    Ich habe schon vieles vor dem Speichern versucht:

    * $error_message = utf8_decode($error_message);
    * header('Content-Type: text/html; charset=ISO-8859-1');
    * fwrite($file, chr(239) . chr(187) . chr(191) . $content);


  • #2
    Versuche es unter Windows mit Notepad++, PDT oder Netbeans
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      Anstatt utf8_decode() zu verwenden, warum verwendest du nicht einfach UTF-8 und sendest den entsprechenden Header dazu? Das wäre ohnehin vorteilhafter.

      Kommentar


      • #4
        Zitat von rkr Beitrag anzeigen
        Versuche es unter Windows mit Notepad++, PDT oder Netbeans
        Ich habe mit Notepad++ versucht -> weiterhin selbes Problem

        Auch Webocton zeigt ein Fragezeichen für Umlaute an.

        Kommentar


        • #5
          Zitat von Tropi Beitrag anzeigen
          Anstatt utf8_decode() zu verwenden, warum verwendest du nicht einfach UTF-8 und sendest den entsprechenden Header dazu? Das wäre ohnehin vorteilhafter.
          Wie meinst du es?

          ich hatte's vorher so:
          PHP-Code:
                      header('Content-Type: text/html; charset=ISO-8859-1');       
                                  
                      
          $error_message_old file_get_contents('err_log.txt');
                      
          file_put_contents('err_log.txt'$error_message"\r\n\r\n" $error_message_old); 
          dann so:
          PHP-Code:
                      $error_message utf8_decode($error_message);             
                                  
                      
          $error_message_old file_get_contents('err_log.txt');
                      
          file_put_contents('err_log.txt'$error_message"\r\n\r\n" $error_message_old); 
          und so:
          PHP-Code:
                      header('Content-Type: text/html; charset=ISO-8859-1');   
                                  
                      
          $error_message_old file_get_contents('err_log.txt');
                      
          file_put_contents('err_log.txt'$error_message"\r\n\r\n" $error_message_old); 
          auch mal so:
          PHP-Code:
          $fileName 'myFile.txt';
          $file fopen($path $fileName'w');
          fwrite($filechr(239) . chr(187) . chr(191) . $content);
          fclose ($file); 
          Aber hilf alles nichts

          Kommentar


          • #6
            So:
            PHP-Code:
            header('Content-Type: text/html; charset=utf-8'); 
            und sonst nichts.

            Oder warum willst du unbedingt ISO-8859 verwenden?

            Kommentar


            • #7
              Welche Zeichenkodierung nutzt denn die Datei, die du auslesen willst, überhaupt?

              So was muss man wissen.

              Kommentar


              • #8
                Zitat von Tropi Beitrag anzeigen
                So:
                PHP-Code:
                header('Content-Type: text/html; charset=utf-8'); 
                und sonst nichts.

                Oder warum willst du unbedingt ISO-8859 verwenden?
                Ich habe einfach alles probiert.


                so geht aber auch nicht:
                PHP-Code:
                            header('Content-Type: text/html; charset=utf-8');         
                                        
                            
                $error_message_old file_get_contents('err_log.txt');
                            
                file_put_contents('err_log.txt'$error_message"\r\n\r\n" $error_message_old); 

                Kommentar


                • #9
                  Zitat von mermshaus Beitrag anzeigen
                  Welche Zeichenkodierung nutzt denn die Datei, die du auslesen willst, überhaupt?

                  So was muss man wissen.

                  Das weiß ich nicht, denn ich habe nichts eingestellt. Hatte einfach nur im Windows-Explorer -> rechte Maustaste -> neu -> Textdokument

                  Kommentar


                  • #10
                    Was versuchst du da auch zu tun? Der Header geht an den Browser, das hat nichts damit zu tun was du danach in irgendwelche Dateien schreibst.

                    Wie mermshaus schon gesagt hat, müsste man halt wissen in welchem Zeichensatz die Datei derzeit gespeichert ist. Am einfachsten geht das wenn du die Text-Datei im Editor oder Browser öffnest und dann den Zeichensatz einfach umstellst und schaust wann die Umlaute korrekt dargestellt werden. Bei Chrome kannst du das über Anzeigen->Codierung umstellen.

                    Kommentar


                    • #11
                      Zitat von Tropi Beitrag anzeigen
                      Was versuchst du da auch zu tun? Der Header geht an den Browser, das hat nichts damit zu tun was du danach in irgendwelche Dateien schreibst...
                      Ja, das habe ich mir gedacht, dass das an den Browser geht. Das wusste ich, wollte nur ausprobieren.

                      Also, es geht nicht darum, die Textdatei im Browser anzuzeigen, sondern einfach darum das, was PHP darein schreibt, einfach durch Doppelklick auf den Dateinamen im Windows-Explorer anzuzeigen:

                      Text Datei existiert noch nicht, also :

                      Windows-Explorer -> rechte Maustaste -> neu -> Textdokument mit Namen : err_log.txt erstellen.

                      Dann PHP-Code ausführen.

                      Dann wieder im Windows-Explorer Datei doppelklicken und die Umlaute sind mit einem Fragezeichen dargestellt.

                      Kommentar


                      • #12
                        Die Standardkodierung ist vermutlich Windows-1252 (manchmal auch cp1252 genannt). Du müsstest das, was du in die Datei schreibst, dann entsprechend in diesen Zeichensatz umwandeln (mb_convert_encoding), falls deine Quellcode-Datei (beziehungsweise die Stelle, an der du die Nachricht generierst) etwa UTF-8 nutzt.

                        Besser wäre es, die Log-Datei auch als UTF-8 abzulegen, aber wenn die Windows-Tools, die du nutzen willst, um den Inhalt einzusehen, dafür zu… also, wenn die das nicht können, dann geht es nur so umständlich (und verlustbehaftet, da Windows-1252 nur ~230 Zeichen oder so enthält).


                        Wenn du die Datei dann in einem Browser darstellen willst, das Spielchen gegebenfalls dann halt umgekehrt. UTF-8-Header setzen, Dateiinhalt per mb_convert_encoding von Windows-1252 nach UTF-8 umwandeln und ausgeben.


                        Edit: Mir sagt jemand, dass Notepad mittlerweile wohl tatsächlich doch UTF-8 schreiben und lesen kann. Vielleicht ist es also auch genau umgekehrt und deine Quellcode-Dateien sind Nicht-UTF-8, die Logdatei aber schon. Da würde ich aber nicht drauf wetten.

                        Wenn du es nicht selbst rausfinden kannst, schau dir mal einen Hexdump der Dateien mit signifikanten Zeichen wie Umlaute an. Bestehen die aus zwei Bytes, ist es höchstwahrscheinlich UTF-8, ansonsten höchstwahrscheinlich Windows-1252.

                        Kommentar


                        • #13
                          Die Standardkodierung ist vermutlich Windows-1252 (manchmal auch cp1252 genannt). Du müsstest das, was du in die Datei schreibst, dann entsprechend in diesen Zeichensatz umwandeln (mb_convert_encoding), falls deine Quellcode-Datei (beziehungsweise die Stelle, an der du die Nachricht generierst) etwa UTF-8 nutzt.
                          Halte ich für Unsinn. Eine leere Textdatei hat erstmal gar keine Kodierung. Es sei denn, es wird eine mit BOM angelegt.

                          Desweiteren schreibt file_put_contents die Datei komplett neu. Ergo ist wohl einfach die Anzeige unter Windows schuld.

                          Überhaupt, was raten wir hier rum, der TE soll das Ding mit nem Hex-Editor untersuchen, dann weiß er erstmal worüber er redet.
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar


                          • #14
                            Die Kodierung, die Windows (bzw. Notepad) wählt, wenn du eine leere Textdatei erzeugst und dann im Notepad (oder Windows-Editor oder wie auch immer das Teil heißt) öffnest, "äöü" reinschreibst und wieder speicherst.

                            Kommentar


                            • #15
                              Zitat von nikosch Beitrag anzeigen
                              Ergo ist wohl einfach die Anzeige unter Windows schuld...
                              Ist Windows nicht einfach Windows?

                              Ich will eine PHP-Anwendung protokollieren. Und im Fehlerfall, will ich die .txt Datei haben, die mir zugesendet wird, um zu sehen, was drin steht (durch Doppelklick).

                              Was meinst du mit Hex-Editor? Ist das, um Assembler zu programmieren, oder?

                              Ich denke aber auch, dass Windows schuld ist

                              Kommentar

                              Lädt...
                              X