csvファイルを出力して、Excelで見ると文字化けしてしまった🥲
先に結論
csvファイルの文字コードを
- Macなら
UTF-8 with BOM
にする! - Windowsなら
Shift JIS
にする! - (少なくともMacユーザー→Macユーザーへ)Slackで
UTF-8 with BOM
を送付すると、BOM
が消滅してUTF-8
に変換される
原因と解決法の調査
まず、作成しているアプリでは、データをcsvファイルとしてダウンロードする機能を実装していたが、そのファイルをExcelで開くと文字化けしてしまっていた。ガビーン
調べると、Excelでは文字コードがUTF-8 with BOM
かShift JIS
ではないと文字化けすることがわかった!
(アプリで出力するcsvファイルの文字コードは UTF-8
だった)
MacでBOM付きファイルを生成する
上記の調査が正しいか検証するために、試しにUTF-8 with BOM
のファイルを生成したかったが、MacのVSCodeではできなかった。おそらくWindowsならできるのかも。
Macだと「CotEditor」でUTF-8 with BOM
に変換できた。
BOM付きに変換したcsvファイルでweb版のExcelを開くと、文字化けが直っていた!🎉
BOM付きファイルの罠
web版での検証だったので、念のためMacユーザーだけどdesktop版のExcelアプリを持っている人BOM付きCSVファイルをSlackで送付して確認してもらった。
すると、なんとまだ文字化けしたままだった🥲
さらに原因を特定するために、
- UTF-8のcsvファイル
- CotEditorでBOM付きに変換したファイル
- 自作したアプリ上でBOM付きに変換したファイル
- Shift JIS に変換したファイル
を用意して、Windowsユーザーの方にweb版とdesktop版のエクセルそれぞれで見てもらった。
結果は、「Shift JIS に変換したファイル」のみ文字化けが直っていた。
さらにさらに原因を特定するために、
windowsユーザーの方に上記の4つのファイルの文字コードをVSCodeで確認してもらったところ、
- UTF-8のcsvファイル:
UTF-8
- CotEditorでBOM付きに変換したファイル:
UTF-8
←❗️ - 自作したアプリ上でBOM付きに変換したファイル:
UTF-8
←❗️ - Shift JIS に変換したファイル:
Shift JIS
となっていた...!!
なんで、2と3もUTF-8
なんじゃ...???
そこで、相手のPC上でUTF-8 with BOM
のcsvファイルを作成してもらって、VSCodeで文字コードを確認すると、UTF-8 with BOM
にちゃんとなっていた!
そのUTF-8 with BOM
のcsvファイルをweb版とdesktop版のExcelで開くと、文字化けが直っていた!!
もしや、SlackでUTF-8 with BOM
ファイルを送信するとBOM
が消える??
上記の検証結果から推測するに、UTF-8 with BOM
ファイルならちゃんと文字化けは直るが、スSlackで送付してダウンロードしたファイルはBOM
が消失する(少なくともMacユーザーの場合)。
2人のMacユーザーにSlackでUTF-8 with BOM
ファイルを送信して、文字コードを確認するとやはりUTF-8
のBOM
無しになっていた!
結論:BOMは消えることがある
上記の検証から、少なくともMacユーザー→MacユーザーへSlackでファイルを送付し、ダウンロードしてもらうとBOMが消えることが判明しました。
アプリをデプロイし、Windowsユーザーの人にアプリ上からBOM付き変換処理をしたCSVファイルをダウンロードしてもらうと、ちゃんとExcelでの文字化けは直っていました🎊