匿名質問者

html5-FileAPIで2バイト文字CSV出力


下記の様に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");

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2015/07/13 10:15:41

ベストアンサー

匿名回答3号 No.2

回答のために,専用の記事を執筆しました。

動作デモも作っておきました。


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点です。

どうぞご確認ください。

匿名質問者

ご回答ありがとうございます

記事を参照させて頂き無事稼働確認できました。

encoding.shのサンプルを見て、文字列ではなく文字コード配列を渡す
という所までは分かったのですが、どうやってコードを生成?と悩んでおりました。

2015/07/13 10:15:34

その他の回答1件)

匿名回答1号 No.1

文字コード変換部分はコメントアウトされてるようですが、
ループ内で重複して変換されてしまっているように見えます。

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');

この位置で変換をしてみてはどうでしょうか

匿名質問者

ご回答ありがとうございます
私のソース転記ミスでした

for(i=0;i<data_json.length;i++){
temp = data_json[i].Index_name + ',';
content = content + Encoding.convert(temp, '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");

2015/07/10 16:57:07
匿名回答3号 No.2

ここでベストアンサー

回答のために,専用の記事を執筆しました。

動作デモも作っておきました。


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点です。

どうぞご確認ください。

匿名質問者

ご回答ありがとうございます

記事を参照させて頂き無事稼働確認できました。

encoding.shのサンプルを見て、文字列ではなく文字コード配列を渡す
という所までは分かったのですが、どうやってコードを生成?と悩んでおりました。

2015/07/13 10:15:34
  • 匿名回答2号
    匿名回答2号 2015/07/10 18:34:26
    javascriptを利用した解決法ではないのでコメントで。

    次のようなCSV作成ソフトで文字コードを変換して保存してからエクセルで開いてみてはどうでしょうか。

    http://www.vector.co.jp/soft/winnt/writing/se495291.html

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません