CSVファイルのエクスポートで文字化けが発生

CSV形式でユーザーリストをエクスポートする際、nameにASCII文字と数字以外の文字が含まれていると文字化けが発生します。

この問題に対処するために、2つの解決策を見つけました。

  1. Excelで新しいXLSXファイルを作成し、「テキスト/CSVから」オプションを使用してデータをインポートし、ファイルの発信元を「Unicode (UTF-8)」に調整します。


    image

  2. Notepad++を使用してCSVファイルを開き、エンコーディングを「UTF-8」から「UTF-8-BOM」に変更します。

結果:

これら両方の解決策は、症状を解決するものの、根本原因に対処していません。


さらに調査した結果、この問題に対する長期的な解決策の可能性が見つかりました。

// 'body'をデータ行、'header'をヘッダー行とするCSVを生成するプロセス。
const csv = body.reduce((prev, current) => `${prev}\r\n${current}`, header);

// Excelは、ファイルがUTF-8エンコードされていることを示すためにバイトオーダーマーク(BOM)を必要とします。
const BOM = Buffer.from('\uFEFF');

// 生成されたCSVコンテンツとBOMヘッダーを連結します。
const bomCsv = Buffer.concat([BOM, Buffer.from(csv)]);

// 結果のバッファを文字列に変換して返します。
return bomCsv.toString();

// 返された文字列がダウンロードされ、Excelで開かれると、スプレッドシートに中国語コンテンツが正しく表示されます。

要するに、ExcelはCSVファイルのエンコーディングを指定するためのメタデータを必要とします。Microsoftはこの目的のためにBOM(バイトオーダーマーク)ヘッダーを導入しました。このヘッダーは他のスプレッドシートソフトウェアでは無視される可能性がありますが、Excelにとっては非常に重要です。ソフトウェア間の互換性を確保するために、CSV生成中にBOMヘッダーを含めることが不可欠です。

来期のバージョンでこの解決策を組み込む予定はありますか?そうすることで、言語サポートが拡大し、バグの発生が減少する可能性があります。

この件にご注意いただきありがとうございます。

参考:
https://www.zhihu.com/question/21869078/answer/350728339

「いいね!」 1