Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speichern von CSV mit UTF-16BE-Codierung in PHP

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

(Sind Sie sicher, dass Sie BE wollen? Es ist eine ziemlich selten verwendete Kodierung. Windows „Unicode“ ist UTF-16LE.)

Ich würde die Verwendung von "auto" vermeiden als from_encoding. Es ist ein unzuverlässiger Ausweichmanöver, der besonders bei kurzen Saiten oft zu falschen Ergebnissen führt. Da die Eingabe anscheinend UTF-8 ist, sollten Sie dies stattdessen explizit angeben.

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

Leider fputcsv kann nicht in eine UTF-16-codierte Datei schreiben. Es verwendet Einzelbyte-ASCII-Kommas/Anführungszeichen/Zeilenumbrüche, sodass es nur für Codierungen funktioniert, die ASCII-Obermengen sind. Wenn Sie es also verwenden wollten, müssten Sie die gesamte Datei als UTF-8 schreiben und dann die gesamte Datei in UTF-16 transcodieren.

Vielleicht möchten Sie stattdessen einen anderen (oder Ihren eigenen) CSV-Writer in Betracht ziehen; sowie lästig in der Verwendung für Nicht-ASCII-Kodierungen, fputcsv entspricht auch nicht dem RFC-Standard für CSV-Dateien, sodass Sie problemlos Dateien generieren können, die die meisten CSV-verarbeitenden Programme nicht richtig laden können.

Die in PHP eingebauten CSV-Funktionen sind im Grunde eine reine Zeitverschwendung.