2013-08-15 10 views
13

javascriptを使用してクライアント側でCSVファイルを生成しようとしています。私はthe answer on this stackoverflow questionに従った。私はコンテンツにユニコード文字を持っています(私の場合はヘブライ文字)。ユニコード文字を使用したJavaScriptによるExcel用CSVの生成

ファイルの生成は成功しますが、Excelでファイルを開くと、すべてのユニコード文字が面白い文字として表示されます。 ASCII文字(英語と数字)がうまく表示されます。

メモ帳でファイルを開くと、ユニコード文字がうまく表示されます。だから、これはExcelと、ファイルを保存する方法と関係があると思います。

アイデア?

+1

で動作し、

は、だからここのコード

data = new TextEncoder('utf-16be').encode(csvContent); // create a Blob object for the download const blob = new Blob(['\uFEFF', data], { type: 'text/csv;charset=utf-8'; }); // when using IE/Edge, then use different download call if (typeof navigator.msSaveOrOpenBlob === 'function') { navigator.msSaveOrOpenBlob(blob, filename); } else { // this trick will generate a temp <a /> tag that you can trigger a hidden click for it to start downloading const link = document.createElement('a'); const csvUrl = URL.createObjectURL(blob); link.textContent = 'download'; link.href = csvUrl; link.setAttribute('download', filename); // set the visibility hidden so there is no effect on your web-layout link.style.visibility = 'hidden'; // this part will append the anchor tag and remove it after automatic click document.body.appendChild(link); link.click(); document.body.removeChild(link); } 

だとそれはそれです。このリンクは役に立ちますか? http://stackoverflow.com/questions/155097/microsoft-excel-mangles-diacritics-in-csv-files –

+0

はいはいはい! BOMプレフィックスを追加しました! –

答えて

29

Jack Coleのコメントとthis questionに続いて、BOM接頭辞(\ uFEFF)をファイルの先頭に追加していた問題を修正しました。

これは、作業コードです:ノード/ Expressサーバ上で

var csvContent = "...csv content..."; 
var encodedUri = encodeURI(csvContent); 
var link = document.createElement("a"); 
link.setAttribute("href", "data:text/csv;charset=utf-8,\uFEFF" + encodedUri); 
link.setAttribute("download","report.csv"); 
link.click(); 
+0

私にとってうまく動作します! –

+11

私のためには機能しません。 Excelは死ぬ必要があります。 –

+0

私のケースで働いてくれてありがとう –

1

、私はシェイの答えを試みたが、私は私のヘッダーに無効な文字のためのエラーを取得しました。代わりに、\uFEFFを返信本体の先頭に追加しました。

app.get('/', function (req, res) { 
    var csv = Papa.unparse(...); 
    res.set({ 
     'Content-Type': 'text/csv; charset=UTF-8', 
     'Content-Disposition': 'attachment; filename="file.csv"', 
    }); 
    res.send('\uFEFF' + csv) 
}) 
+0

私のために働いた、ありがとう – user301441

0

提案された解決策は、すべてのブラウザでは動作しませんでしたが、私は、... IE9-を知らない、それはすべてのブラウザ(クロームやFirefox、IE11でもエッジでの作業を取得する方法を発見しました私はもはや彼らにアクセスすることができないので10)。

私はencoding.jsをエンコードするために外部ライブラリを使用する必要があります。これはユニコードで驚くほどうまく機能します(私のユニコードの絵文字はExcelのCSV書き出しで見ることができます)。それはそれはバイトオーダーマークすることができIE/Edge/Chrome/Firefox

enter image description here

関連する問題