$key = mb_convert_encoding($key, 'UTF-16BE', "auto");
(Är du säker på att du vill ha BE? Det är en ganska sällan använd kodning. Windows "Unicode" är UTF-16LE.)
Jag skulle undvika att använda "auto"
som from_encoding. Det är en opålitlig bodge som ofta ger fel resultat, särskilt på korta strängar. Eftersom indata tydligen är UTF-8 bör du ange det uttryckligen istället.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));
Tyvärr fputcsv
kan inte skriva till en UTF-16-kodad fil. Den använder enbyte ASCII-komma/citattecken/nyrader så det fungerar bara för kodningar som är ASCII-superuppsättningar. Så om du vill använda den måste du skriva hela filen som UTF-8 och sedan koda om hela filen till UTF-16.
Du kanske vill överväga en annan (eller din egen) CSV-skribent istället; Förutom att det är irriterande att använda för icke-ASCII-kodningar, fputcsv
uppfyller inte heller RFC-standarden för CSV-filer, så du kan enkelt generera filer som de flesta CSV-krävande program inte kan laddas ordentligt.
PHP:s inbyggda CSV-funktioner är i princip ett totalt slöseri med allas tid.