CSVエンコード問題解決
概要
Linux サーバで DB で集計して CSV ファイルをレポートする
なんてことがあるかと思います。
CSV ファイルを Linux サーバで作成し
Windows, Mac にメール添付して送信すると
どちらも CSV ファイルを開くと文字化けしてしまう問題に遭遇しました。
この問題を解決すべく調査しました。
そもそも何で文字化け?
CSV ファイルは Windows, Mac では基本 Excel が起動し開きますが
デフォルト Shift_Jis として開こうとします。
テキストファイルに一旦開いてコピーしてエクセルに貼り付ける対策を紹介しているブログもありましたが
クライアント様がお相手となる場合やファイルサイズが非常に大きい場合は
一手間かける方法は NG です。
調査 1 文字コードを変更してから mutt でメール添付送信
- 文字エンコードは nkf : Network Kanji Filter Version 2.0.7 (2006-06-13)
- メール送信は mutt 1.4.2.2i
- mutt の設定ファイルをいじりましたがうまくいかなかったです。
Shift_JIS
1 | $ echo '大崎,yoshi,浜田,moto,松本' > sjis.csv |
- メール受信し添付ファイルをダウンロードし文字コードチェック
1 | $ nkf -g sjis.csv |
あれ? Shift_JIS にエンコードして送ったんだけど UTF-8 になってる
JIS (ISO-2022-JP)
1 | $ echo '大崎,yoshi,浜田,moto,松本' > jis.csv |
- メール受信し添付ファイルをダウンロードし文字コードチェック
1 | $ nkf -g jis.csv |
ISO-2022-JP で文字コードが変更されず送信されたけど…
やっぱり文字化け…
UTF-8
1 | $ echo '大崎,yoshi,浜田,moto,松本' > utf8.csv |
- メール受信し添付ファイルをダウンロードし文字コードチェック
1 | $ nkf -g utf8.csv |
当然文字化け…
UTF-8 BOM 付き
1 | $ echo '大崎,yoshi,浜田,moto,松本' > utf8-bom.csv |
- メール受信し添付ファイルをダウンロードし文字コードチェック
1 | $ nkf -g utf8-bom.csv |
JIS と同様の結果…
EUC
1 | $ echo '大崎,yoshi,浜田,moto,松本' > euc.csv |
- メール受信し添付ファイルをダウンロードし文字コードチェック
1 | $ nkf -g euc.csv |
ファイルエンコードではうまくいきませんでした。
調査 2 BINARY ファイルにしてみる
もっと具体的にいうと 圧縮ファイルを送ってみる
Shift_JIS で CSV が開かれるので Shift_JIS にエンコードします。
1 | $ echo '大崎,yoshi,浜田,moto,松本' > sjis.csv |
- メール受信し添付ファイルをダウンロードし文字コードチェック
1 | $ nkf -g sjis.zip |
Shift_JIS のままダウンロードできてる!
これは期待できそう!
うまくいった!
総評
- Windows, Mac で送られてきた CSV ファイルで文字化けせず開くことができました。
- 圧縮した方が容量を下げて通信が行えるのでよくなりました。