frankx: excelkonvert, Zeichenkodierung "FS" "RS" "DC3" "NUL"

Hellihello,

beim Auslesen aus einer Exeltabelle via PHP tauchen Zeichen auf, die im  Browser (FF) wie ein Quadrat aussehen, sich per copy-paste nicht wirklich kopieren lassen bzw. einen Fehler bei der Vorschau hier produzieren. Im Scite-Editor werden sie als NUL, RS/FS (für Anführungszeichen) und DC3 (ein längerer Bindestrich) dargestellt werden in Spezialformatierung (weiße Schrift auf schwarzem Grund mit abgerundeten Ecken. Über ein substr() kann ich die "NUL" zB auch ersetzen. Ich würde aber gerne kapieren, um was für eine Kodierung es sich handelt (hexa...???) und wie sich diese Formatzeichen direkter erfassen lassen,

Dank,

frankx

  1. Hallo,

    beim Auslesen aus einer Exeltabelle via PHP tauchen Zeichen auf, die im  Browser (FF) wie ein Quadrat aussehen, sich per copy-paste nicht wirklich kopieren lassen bzw. einen Fehler bei der Vorschau hier produzieren.

    wie liest du die Excel-Tabelle genau aus? Mit fopen(), fread() und so?
    Das kann nicht funktionieren, weil die Daten in einem proprietären Binärformat vorliegen.

    Ich würde aber gerne kapieren, um was für eine Kodierung es sich handelt

    Die Codes, die du im Thread-Titel erwähnst, sind die Klartextnamen einiger ASCII-Steuerzeichen (also die Zeichencodes 00h bis 1Fh), z.B.
     00h  NUL  Null Character
     19h  DC3  device control 3
     1Ch  FS   file separator
     1Eh  RS   record separator
    (siehe auch http://www.asciitable.com/)
    Das dürfte der Zeichensalat sein, der herauskommt, wenn man eine Binärdatei in einem unbekannten Format einfach als normalen Text interpretiert.

    So long,
     Martin

    --
    Funktion und Referenz auf diese sind mir bekannt, mit Zeigern kann ich nicht viel mehr anfangen, als damit auf Buttons zu klicken.
      (Ashura)
    1. Hellihello

      wie liest du die Excel-Tabelle genau aus? Mit fopen(), fread() und so?
      Das kann nicht funktionieren, weil die Daten in einem proprietären Binärformat vorliegen.

      excel_spreadsheet_reader

      handelt

      Die Codes, die du im Thread-Titel erwähnst, sind die Klartextnamen einiger ASCII-Steuerzeichen (also die Zeichencodes 00h bis 1Fh), z.B.
      00h  NUL  Null Character
      19h  DC3  device control 3
      1Ch  FS   file separator
      1Eh  RS   record separator

      (siehe auch http://www.asciitable.com/)
      Das dürfte der Zeichensalat sein, der herauskommt, wenn man eine Binärdatei in einem unbekannten Format einfach als normalen Text interpretiert.

      besten Dank, habe grade auch mal weiterrecherchiert und mit

        
        
      for ($i=0;$i<50;$i++) {  
       echo $i."-".chr($i)."\n";  
      }  
        
      
      

      herausgefunden, dass NUL das ascii=0 ist und

        
      $fs=chr(28);  
      echo $fs;  
      $rs=chr(30);  
      echo $rs;  
      $dc3=chr(19);  
      echo $dc3;  
      
      ~~~.  
        
      Der Excel-Reader bietet aber auch eine output-encoding Funktion an, habe da aber die Details noch nicht kapiert.  
        
      Besten Dank,  
        
      Frankx  
      
      
      1. Hallo,

        wie liest du die Excel-Tabelle genau aus?
        excel_spreadsheet_reader

        okay, das müsste zumindest ein richtiger Ansatz sein. Wobei die Frage ist, ob dieser Excel Reader mit der von dir verwendeten Excel-Version kompatibel ist, denn das Dateiformat ist von Version zu Version immer wieder unterschiedlich.

        00h  NUL  Null Character
        19h  DC3  device control 3
        1Ch  FS   file separator
        1Eh  RS   record separator
        (siehe auch http://www.asciitable.com/)

        besten Dank, habe grade auch mal weiterrecherchiert und mit

        for ($i=0;$i<50;$i++) {

        echo $i."-".chr($i)."\n";
        }

        
        > herausgefunden, dass NUL das ascii=0 ist und  
        > ~~~php
        
        $fs=chr(28);  
        
        > echo $fs;  
        > $rs=chr(30);  
        > echo $rs;  
        > $dc3=chr(19);  
        > echo $dc3;
        
        ~~~.  
          
        Das hatte ich ja oben schon aufgelistet. :-)  
        Nur dass ich mich bei DC3 in der Spalte vertan habe und die 19 als 19h gelesen habe - richtig wäre 13h gewesen, was du ja mit dezimal 19 auch bestätigt hast.  
          
        
        > Der Excel-Reader bietet aber auch eine output-encoding Funktion an, habe da aber die Details noch nicht kapiert.  
          
        Ich denke eher, dass er Daten liest, die keine Nutzdaten, sondern Kontrolldaten sind.  
          
        Ciao,  
         Martin  
        
        -- 
        Der Stress von heute ist die gute alte Zeit von morgen.
        
        1. Hellihello Martin,

          okay, das müsste zumindest ein richtiger Ansatz sein. Wobei die Frage ist, ob dieser Excel Reader mit der von dir verwendeten Excel-Version kompatibel ist, denn das Dateiformat ist von Version zu Version immer wieder unterschiedlich.

          Das klappt im Grunde ganz prima (version 8.0 glaube ich).

          Ich denke eher, dass er Daten liest, die keine Nutzdaten, sondern Kontrolldaten sind.

          Das klappt in fast allen Fällen problemlos. Wenn in die Excelzellen aber Daten hereinkopiert wurden (Textpassagen), die selbst schon Absätze (Absatzmarken) beeinhalten, scheint Excel intern das Format der Zelle zu ändern. Dann kommen zwischen allen Buchstaben(!) diese "NUL", und aus Anführungszeichen wird das FS oder RS und als Bindestrich das DC3. Mit den Format, Encode und Outputfunktionen scheint es jetzt aber zu klappen
          (falls es jemanden interessiert:

            
            $Einleser->setOutputEncoding('ISO-8859-1');  
            
            /***  
            * if you want you can change 'iconv' to mb_convert_encoding:  
            * $data->setUTFEncoder('mb');  
            *  
            **/  
            $Einleser->setUTFEncoder('mb');  
            
            /***  
            * By default rows & cols indeces start with 1  
            * For change initial index use:  
            * $data->setRowColOffset(0);  
            *  
            **/  
            
            /***  
            *  Some function for formatting output.  
            * $data->setDefaultFormat('%.2f');  
            * setDefaultFormat - set format for columns with unknown formatting  
            *  
            * $data->setColumnFormat(4, '%.3f');  
            * setColumnFormat - set format for column (apply only to number fields)  
            *  
            **/  
            $Einleser->setDefaultFormat('%.2f');  
          
          

          Dank und Gruß,

          frankx

          1. Hey,

            Dann kommen zwischen allen Buchstaben(!) diese "NUL"

            das deutet sehr stark darauf hin, dass die Daten in UTF-16 vorliegen. Das hab ich schon bei vielen Datenformaten von Microsoft gesehen.

            --
            水-金-地-火-木-土-天-海-冥