$key = mb_convert_encoding($key, 'UTF-16BE', "auto");
(Sind Sie sicher, dass Sie BE wollen? Es ist eine ziemlich selten verwendete Kodierung. Windows „Unicode“ ist UTF-16LE.)
Ich würde die Verwendung von "auto"
vermeiden als from_encoding. Es ist ein unzuverlässiger Ausweichmanöver, der besonders bei kurzen Saiten oft zu falschen Ergebnissen führt. Da die Eingabe anscheinend UTF-8 ist, sollten Sie dies stattdessen explizit angeben.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));
Leider fputcsv
kann nicht in eine UTF-16-codierte Datei schreiben. Es verwendet Einzelbyte-ASCII-Kommas/Anführungszeichen/Zeilenumbrüche, sodass es nur für Codierungen funktioniert, die ASCII-Obermengen sind. Wenn Sie es also verwenden wollten, müssten Sie die gesamte Datei als UTF-8 schreiben und dann die gesamte Datei in UTF-16 transcodieren.
Vielleicht möchten Sie stattdessen einen anderen (oder Ihren eigenen) CSV-Writer in Betracht ziehen; sowie lästig in der Verwendung für Nicht-ASCII-Kodierungen, fputcsv
entspricht auch nicht dem RFC-Standard für CSV-Dateien, sodass Sie problemlos Dateien generieren können, die die meisten CSV-verarbeitenden Programme nicht richtig laden können.
Die in PHP eingebauten CSV-Funktionen sind im Grunde eine reine Zeitverschwendung.