Hi!
ich würde gerne ein Unicode CSV-File verarbeiten.
Unicode ist ein Zeichensatz, keine Zeichenkodierung. Zum physikalischen Abbilden von Daten wird eine Zeichenkodierung benötigt. In welcher Kodierung liegt die Datei wirklich vor?
function decodeUnicode($str) {
$ret = "";
$x = strlen($str);
for ($i = 1; $i < $x; $i += 2)
$ret .= substr($str, $i, 1);
return $ret;
}
Danach (von mir ein bisschen gekürzt) zu urteilen liegt wohl UTF-16BE vor. Du nimmst immer nur das zweite Byte und bekommst von Zeichen jenseits vom Codepoint 255 kaputtes Zeug. Aber egal erst einmal, vielleicht hast du ja solche Zeichen nicht.
> $fh = fopen($CSVFilename,"r");
> while($line=fgetcsv($fh,null,"\t","\"")){
Ich könnte nun eine Weile spekulieren über die Mischung von UTF-16BE und einer 1-Byte-Kodierung für die Trennzeichen, aber besser wäre, wenn du mal einen Hex-Dump zeigst, in dem mindestens eine komplette Zeile und ein " als Datenbestandteil vorkommt.
> evtl jemand hier, der meinen Fehler sieht?
Sicherlich nicht ohne die Ausgangsdaten zu kennen.
Lo!