$key = mb_convert_encoding($key, 'UTF-16BE', "auto");
(Czy na pewno chcesz BE? To dość rzadko używane kodowanie. Windows „Unicode” to UTF-16LE.)
Unikałbym używania "auto"
jak from_kodowanie. To zawodna bodge, która często daje złe wyniki, zwłaszcza na krótkich strunach. Ponieważ dane wejściowe są najwyraźniej UTF-8, należy to wyraźnie określić.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));
Niestety fputcsv
nie można pisać do pliku zakodowanego w UTF-16. Używa jednobajtowych przecinków/cytatów/nowych linii ASCII, więc działa tylko dla kodowań, które są nadzbiorami ASCII. Więc jeśli chciałbyś go użyć, musiałbyś zapisać cały plik jako UTF-8, a następnie transkodować cały plik do UTF-16.
Możesz zamiast tego rozważyć innego (lub własnego) autora CSV; jak również irytujące w użyciu dla kodowań innych niż ASCII, fputcsv
nie jest również zgodny ze standardem RFC dla plików CSV, więc możesz łatwo generować pliki, które większość oprogramowania wykorzystującego CSV nie może poprawnie załadować.
Wbudowane funkcje CSV PHP są w zasadzie kompletną stratą czasu każdego.