たとえば mishiki さんの例
なお、「Shift_JISを止めてUTF-8にしろ」という意見には賛成できません。理由は、Shift_JISじゃないCSVをExcelは開けないからです。インポートすれば開けますが、慣れていない人達の大混乱は必至です。
— 未識@🐠🏭技術書典2 お-03 (@mishiki) 2017年2月22日
@s_no_jijo 本当にそのまま開けるのもあるんですね。Shift_JISのCSVを、そのままUTF-8 BOM付きにしてみただけではダメでした。うーん条件が分からない。様々な環境でのトラブルシューティングの工数を考えると、まあレガシーShift_JISもやむ無しかな…と。
— 未識@🐠🏭技術書典2 お-03 (@mishiki) 2017年2月23日
この件に関して、つい先週まではUTF-8派だったのですが、いろいろ考え議論して改宗しました。現在のお勧めは:
- 改行は CR+LF
- 文字コードはShift_JIS
- 極力 HTTP 応答に charset=Shift_JIS が付くよう設定しよう。
なぜ Shift_JIS なのか。まず、さまざまな利用環境での文字コード対応状況(ベンダ保証でなく実験結果):
- MS Excel で文字化けせず開けるのは Shift_JIS または BOM つき UTF-8
- Apple iOS や Android タブレットでは UTF-8 しか開けないアプリが散見される
- ブラウザ上の JavaScript から文字化けせず開けるのは、正しい charset がついているか、UTF-8
- Java など現代的なプログラム環境から読む場合も「正しく charset を知っていれば化けない」という意味では同様
- Cで自作プログラムする場合など、文字コード認識を適切なライブラリに任せず、オクテット列として処理している場合、BOM が問題を起こすことが多い
ソフトウェアの問題というのは、たとえばこういう仮定が成り立たなくなるということです:
- 複数の CSV ファイルを cat で連結すれば正しい CSV ファイルが得られる
- CSV ファイルを sort や grep などのコマンドでフィルタした結果も正しい CSV ファイルである
- CSV ファイルを LF で区切って得られる「行」を U+002C COMMA で区切ったものが各セルである
なお、テストに使ったファイルを http://toyoda-eizi.net/2017/csv-utf8/files.html に置いておきますのでよかったらお使いください。
0 件のコメント:
コメントを投稿