Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

salvando CSV com codificação UTF-16BE em PHP

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

(Tem certeza de que deseja BE? É uma codificação muito raramente usada. Windows “Unicode” é UTF-16LE.)

Eu evitaria usar "auto" como from_encoding. É um bodge não confiável que muitas vezes produzirá resultados errados, especialmente em cordas curtas. Como a entrada é aparentemente UTF-8, você deve declarar isso explicitamente.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));

Infelizmente fputcsv não pode gravar em um arquivo codificado em UTF-16. Ele usa vírgulas/aspas/novas linhas ASCII de byte único, portanto, funciona apenas para codificações que são superconjuntos ASCII. Então, se você quisesse usá-lo, teria que escrever o arquivo inteiro como UTF-8 e, em seguida, transcodificar o arquivo inteiro para UTF-16.

Você pode querer considerar um gravador de CSV diferente (ou seu próprio); além de ser chato de usar para codificações não-ASCII, fputcsv também não está em conformidade com o padrão RFC para arquivos CSV, então você pode facilmente gerar arquivos que a maioria dos softwares que consomem CSV não podem carregar corretamente.

As funções CSV embutidas do PHP são essencialmente uma completa perda de tempo de todos.