はじめに
以前まとめた、【Node.js】JSON文字列をCSVファイルとして吐き出すという記事で、json2csv
というモジュールを使用し、CSVファイルを正常に出力できたと思っていたのですが、ExcelでCSVファイルを開くと文字化けしてしまっていたので、修正を行いました。
結論
・withBOM
オプションをtrue
にする
解説
json2csv
のドキュメントにwithBOM
オプションの説明が記載されていました。
Unicode Support
Excel can display Unicode correctly (just setting the withBOM option to true). However, Excel can't save unicode so, if you perform any changes to the CSV and save it from Excel, the Unicode characters will not be displayed correctly.
withBOM
オプションをtrue
にするだけで、ExcelではUnicodeを正しく表示できる、的なことが書かれていますね。
なので、インスタンス化時にwithBOM
オプションを付与してあげます。
const json2csvParser = new Parser({fields, transforms, withBOM: true});
これで、Excelでも文字化けすることなく、正常にCSVファイルが表示できるかと思います。
BOMって何だ?
「Byte Order Mark」の正式名称で、BOMが付与されたファイルはUnicodeで書かれている
ことを証明しています。
しかし、Unicodeで書かれたファイル全てにBOMが付与されている訳ではありません。BOMがあってもなくてもどちらでもいいそうです。BOMが存在する理由は、絶対にこのファイルがUnicodeで書かれていることを示す必要がある場合があるからで、今回のExcelでCSVファイルを開く時などが該当します。
ExcelではBOMが付与されたCSVファイルでないと、文字コードが認識されずに文字化けを引き起こしてしまうのです。
参考
バイトオーダマーク(英:Byte Order Mark)とは
簡単に文字化け回避!UNICODE (UTF-8) の CSV データを表示する方法