下記の様にHTML5-FileAPIでCSVを出力ダウンロードさせているのですが
2バイト文字がUNICODEで出力され、直接Excelを開くと化けてしまいます。
ExcelがSJISなためで、javascript側で変換しようとしてもうまくいきません
(encoding.js使用)
文字化けせず直接CSVを開けるようにできないでしょうか
(あくまでjavascript側だけで解決させたい)
for(i=0;i<data_json.length;i++){
content = content + data_json[i].Index_name + ',';
//content = content + Encoding.convert(content, 'SJIS', 'AUTO') + ',';
//改行
content = content + '\r\n';
}
// 指定されたデータを保持するBlobを作成する。
var blob = new Blob([ content ], { "type" : "text/plain" });
// Aタグのhref属性にBlobオブジェクトを設定し、リンクを生成
window.URL = window.URL || window.webkitURL;
$("#" + id).attr("href", window.URL.createObjectURL(blob));
$("#" + id).attr("download", "test.csv");
回答のために,専用の記事を執筆しました。
動作デモも作っておきました。
JavaScript/HTML5で,SJISの日本語CSVファイルをWebページ上で動的に生成してダウンロードするサンプルコードと解説
(動作デモ付き。Excelで開いても文字化けしない)
http://d.hatena.ne.jp/TipsMemo+computer-technology/20150710/p2
↑この解説にも書きましたが,質問内容に記載されているコードが動かない理由は:
(1)Encoding.convertに渡すデータは,文字列ではなく,文字コードの配列である。
(2)convertから返却されるのも,やはり文字コードの配列である。
(3)new Blobに渡すデータは,変換後の文字データではなく,Uint8Arrayである。
この3点です。
どうぞご確認ください。
文字コード変換部分はコメントアウトされてるようですが、
ループ内で重複して変換されてしまっているように見えます。
for(i=0;i<data_json.length;i++){
content = content + data_json[i].Index_name + ',';
//改行
content = content + '\r\n';
}
// フォーマット後にデータ全体を文字コード変換
content = Encoding.convert(content, 'SJIS', 'AUTO');
この位置で変換をしてみてはどうでしょうか
次のようなCSV作成ソフトで文字コードを変換して保存してからエクセルで開いてみてはどうでしょうか。
http://www.vector.co.jp/soft/winnt/writing/se495291.html