$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
に使用するのは面倒です。 また、CSVファイルのRFC標準に準拠していないため、CSVを消費するほとんどのソフトウェアが適切にロードできないファイルを簡単に生成できます。
PHPに組み込まれているCSV関数は、基本的にすべての人の時間を無駄にします。