$key = mb_convert_encoding($key, 'UTF-16BE', "auto");
(Сигурни ли сте, че искате BE? Това е доста рядко използвано кодиране. Windows „Unicode“ е UTF-16LE.)
Бих избягвал да използвам "auto"
като from_encoding. Това е ненадежден бодж, който често дава грешни резултати, особено на къси струни. Тъй като входът очевидно е UTF-8, трябва да посочите това изрично вместо това.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));
За съжаление fputcsv
не може да пише във файл, кодиран с UTF-16. Той използва еднобайтови ASCII запетаи/кавички/нови редове, така че работи само за кодировки, които са супермножества на ASCII. Така че, ако искате да го използвате, ще трябва да напишете целия файл като UTF-8 и след това да транскодирате целия файл в UTF-16.
Вместо това може да помислите за различен (или ваш собствен) CSV записващ инструмент; както и че е досадно да се използва за не-ASCII кодировки, fputcsv
също така не отговаря на стандарта RFC за CSV файлове, така че можете лесно да генерирате файлове, които повечето CSV-консумиращи софтуери не могат да заредят правилно.
Вградените CSV функции на PHP са по същество пълна загуба на време за всички.