$key = mb_convert_encoding($key, 'UTF-16BE', "auto");
(Anda yakin ingin BE? Ini adalah pengkodean yang jarang digunakan. Windows “Unicode” adalah UTF-16LE.)
Saya akan menghindari menggunakan "auto"
sebagai from_encoding. Ini adalah bodge yang tidak dapat diandalkan yang akan sering menghasilkan hasil yang salah terutama pada string pendek. Karena inputnya tampaknya UTF-8, Anda harus menyatakannya secara eksplisit.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));
Sayangnya fputcsv
tidak dapat menulis ke file yang disandikan UTF-16. Ini menggunakan koma ASCII byte tunggal/kutipan/baris baru sehingga hanya berfungsi untuk penyandian yang merupakan superset ASCII. Jadi, jika Anda ingin menggunakannya, Anda harus menulis seluruh file sebagai UTF-8, lalu mentranskode seluruh file ke UTF-16.
Anda mungkin ingin mempertimbangkan penulis CSV yang berbeda (atau milik Anda sendiri); serta mengganggu untuk digunakan untuk penyandian non-ASCII, fputcsv
juga tidak sesuai dengan standar RFC untuk file CSV, sehingga Anda dapat dengan mudah membuat file yang tidak dapat dimuat dengan benar oleh sebagian besar perangkat lunak yang menggunakan CSV.
Fungsi CSV bawaan PHP pada dasarnya membuang-buang waktu semua orang.