Ankündigung

Einklappen
Keine Ankündigung bisher.

CSV-Datei richtig auslesen (Zeichenkodierung)

Einklappen

Neue Werbung 2019

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

  • CSV-Datei richtig auslesen (Zeichenkodierung)

    Hallo, ich versuche gerade CSV-Datei in ein Array mit auszulesen.

    PHP-Code:
      $neues_array = [];

      
    $file fopen('daten.csv''r');

      while ((
    $line fgetcsv($file1000";")) !== FALSE) {
       
    $neues_array[] = $line;
      }
      
    fclose($file); 
    Alles funktioniert bis die Kodierung. Leider funktioniert diese nicht Zeichen ÄÖüÖ werden als ???? angezeigt. Wie kann ich es korrigieren?

  • #2
    Entscheidend ist zu wissen mit welcher Kodierung die CSV erstellt wurde und mit welcher Kodierung Du das ausliest. Siehe Hinweis im Manual zu fgetcsv

    Kommentar


    • #3
      Kodierung: latin1 (ISO 8859-1)

      Kommentar


      • #4
        Zitat von User0101 Beitrag anzeigen
        Kodierung: latin1 (ISO 8859-1)
        Dann musst du auch bei der Ausgabe diese Zeichenkodierung setzen. Oder du konvertierst den String in die gewünschte Zielkodierung.

        Kommentar


        • #5
          Und wie mache ich das?

          PHP-Code:

            $neues_array 
          = [];

          setlocale(LC_CTYPE"de_DE");

            
          $file fopen('vitrex/vitrex_daten.csv''r');

            while ((
          $line fgetcsv($file1000";")) !== FALSE) {
             
          $neues_array[] = $line;
            }
            
          fclose($file); 
          Geht leider nicht.

          Kommentar


          • #6
            Mit einer Funktion die die Konvertierung kann, wie mb_convert_encoding.

            Kommentar


            • #7
              Um es schick zu machen empfehle ich SplFileObject zu nutzen und eine Klasse zu schreiben, welche das SplFileObject erweitert.
              PHP-Code:
              class CsvFileObject extends \SplFileObject
              {
                private 
              $ExternCharSet "UTF-8";
                private 
              $InternCharSet "UTF-8"
              Die Methoden der Klasse können dann eine filter-funktion wie diese nutzen:

              PHP-Code:
                private function filter(array $row){
                  
              $ExternCharSet $this->ExternCharSet;
                  
              $InternCharSet $this->InternCharSet;
                  
              $delimiterChange $this->decimalDelimiterChange;

                  
              $row array_map(
                    function(
              $value) use($ExternCharSet,$InternCharSet,$delimiterChange){
                      if(
              $delimiterChange) {
                        
              $numericValue str_replace(',','.',$value);
                        if(
              is_numeric($numericValue)) $value $numericValue;
                      }
                      
              //return iconv($ExternCharSet,$InternCharSet,$value);
                      
              return mb_convert_encoding($value$InternCharSet$ExternCharSet);
                    },
                    
              $row
                  
              );

                  return 
              $row;

              LG jspit

              Kommentar


              • #8
                Vieeleen Daaank!!!!

                Kommentar

                Lädt...
                X