excelkonvert, Zeichenkodierung "FS" "RS" "DC3" "NUL"
frankx
- php
0 Der Martin
0 frankx
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
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
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.
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
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.
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
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.