UTF-8で文字化け回避してCSV出力する方法

UTF-8で文字化け回避してCSV出力する方法です。
なかなか情報が出ていないのでメモしておきます。

【現象】
UTF-8でCSV出力すると、エクセルがUTF-8をサポートしていないため
エクセルでWクリックして開いたときに文字化けしてしまいます

【試行錯誤】
CSV出力時にshift-jisとかに変換するという回避もありましたが
shift-jisだと出ない漢字などが発生してしまいます

【最終回避方法】
①CSVファイルの冒頭のバイナリデータにUFT-8のBOMであるef bb bfを追記してCSVを吐く

②WクリックでCSVファイルを開くのではなく、エクセルの「開く」
メニューからファイルを開く

③ファイルを開くときにダイアログが出てきてutf-8指定、カンマ区切りの指定ができるので開けるようになる

ちなみにJAVAでバイナリの追記をする方法は下記。
-------------------------------------------------------
//バイト型にセット
byte[] test = new byte[]{(byte)0xef, (byte)0xbb, (byte)0xbf};

ServletOutputStream outs = response.getOutputStream();

//書き出し
outs.write(test);
-------------------------------------------------------

[注意]
JSP標準out出力はWriterクラスであり文字しか扱えない為ServletOutputStreamを用意する必要がある。

※バイナリデータを見るには
■バイナリエディタが必要です。
http://www.zob.ne.jp/~c.mos/soft/bz.html

※CSVデータの扱いはCSVエディタが便利
■CSVエディタ CASSAVA
http://www.asukaze.net/soft/cassava/

コメント

F

UTF-8のBOMはかなり曲者ですね。私も昔かなり苦労させられましたよ。

BOMの有り無しを指定できない、へっぽこエディタでPerlのコードをUTF-8でコーディング、そしてサーバーに設置しても何故かエラーになってしまうという問題に遭遇・・・

実はエディタが勝手にBOMを付加してたというオチ(しかもエディタからは見えない!見る設定もない!)

プログラミング言語は文法にシビアなので、BOMをただのゴミと認識しエラーを吐いていたのが原因でした。秀丸に乗り換えてやっと解決^^;

えむ

なるほど。BOMの勝手な追加は痛いね。
やっぱり秀丸様様だね。

さい

ありがとうございました。この問題で、結構悩んでました。

えむ

さいさん>お役に立てて何よりです。難解だった問題や、自分の知らなかったことを今後もブログにしていきます。
非公開コメント

プロフィール

えむ

現在ベンチャー企業を経営する傍ら
兼業ミュージシャンとして活動中。

月別アーカイブ