Mysql
 sql >> Base de données >  >> RDS >> Mysql

enregistrement CSV avec encodage UTF-16BE en PHP

$key = mb_convert_encoding($key, 'UTF-16BE', "auto");

(Êtes-vous sûr de vouloir BE ? C'est un encodage assez rarement utilisé. Windows "Unicode" est UTF-16LE.)

J'éviterais d'utiliser "auto" comme from_encoding. C'est un bodge peu fiable qui produit souvent de mauvais résultats, en particulier sur les cordes courtes. Comme l'entrée est apparemment UTF-8, vous devriez l'indiquer explicitement à la place.

fputcsv($f, array_merge($firstLineKeys, $lineEncoded));

Malheureusement fputcsv ne peut pas écrire dans un fichier encodé en UTF-16. Il utilise des virgules/guillemets/nouvelles lignes ASCII à un octet, de sorte qu'il ne fonctionne que pour les encodages qui sont des surensembles ASCII. Donc, si vous vouliez l'utiliser, vous deviez écrire tout le fichier en UTF-8, puis transcoder tout le fichier en UTF-16.

Vous voudrez peut-être envisager un autre écrivain CSV (ou le vôtre) à la place ; en plus d'être ennuyeux à utiliser pour les encodages non-ASCII, fputcsv n'est pas non plus conforme à la norme RFC pour les fichiers CSV, vous pouvez donc facilement générer des fichiers que la plupart des logiciels consommateurs de CSV ne peuvent pas charger correctement.

Les fonctions CSV intégrées de PHP sont essentiellement une perte de temps totale pour tout le monde.