$key = mb_convert_encoding($key, 'UTF-16BE', "auto");
(Sei sicuro di voler BE? È una codifica usata piuttosto raramente. Windows "Unicode" è UTF-16LE.)
Eviterei di usare "auto"
come from_encoding. È un bodge inaffidabile che spesso produce risultati sbagliati soprattutto su corde corte. Poiché l'input è apparentemente UTF-8, dovresti invece affermarlo esplicitamente.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));
Sfortunatamente fputcsv
impossibile scrivere su un file con codifica UTF-16. Utilizza virgole/virgolette/nuove righe ASCII a byte singolo, quindi funziona solo per le codifiche che sono superset ASCII. Quindi, se si desidera utilizzarlo, è necessario scrivere l'intero file come UTF-8, quindi transcodificare l'intero file in UTF-16.
Potresti invece prendere in considerazione uno scrittore CSV diverso (o tuo); oltre ad essere fastidioso da usare per codifiche non ASCII, fputcsv
inoltre non è conforme allo standard RFC per i file CSV, quindi puoi generare facilmente file che la maggior parte dei software che consumano CSV non possono caricare correttamente.
Le funzioni CSV integrate in PHP sono essenzialmente una completa perdita di tempo per tutti.