2017-02-25 19 views
2

javascript配列をCSVファイルにエクスポートしてダウンロードする必要があります。私はそれをしましたが、「ı、ü、ö、ğ、ş」この文字はのようになります。CSVファイルののように見えます。私はこのサイトで推奨されている多くのソリューションを試しましたが、私のためには機能しませんでした。JavaScriptのエクスポートCSVエンコードutf-8の問題

私のコードスニペットを追加しました。誰でもこの問題を解決できますか?

var csvString = 'ı,ü,ö,ğ,ş'; 
 

 
var a = window.document.createElement('a'); 
 
a.setAttribute('href', 'data:text/csv; charset=utf-8,' + encodeURIComponent(csvString)); 
 
a.setAttribute('download', 'example.csv'); 
 
a.click();

+0

このブラウザは 'data'-URIsをこのように使用することをサポートしていないので、この解決策は' Internet Explorer'では動作しないことはご存知でしょう。しかし、少なくともあなたは 'Firefox'を使って作業するべきです。 'Firefox'は、DOMに追加されていない要素に対して' click'イベントを受け付けません。だからあなたは 'A'要素をDOMに追加するだけでなく、それを作成する必要があります。私の答えの例を見てください。しかし、私の結論も読んでください。このように 'CSV 'を使うことは解決策ではなく、多くの問題の一部です。 –

答えて

1

これはexample.csvファイルを開いているどのようなプログラムに依存します。テキストエディタを使用すると、エンコードはUTF-8になり、文字は不正な形式にはなりません。しかしExcelを使用すると、CSVのデフォルトエンコードはANSIであり、UTF-8ではありません。したがって、ExcelANSIではなく、UTF-8を使用して強制的にエンコードすると、文字の形式が正しくありません。

Excelは、ファイルの最初の文字としてBOMByte Order Mark)を置くとCSVためUTF-8を使用して強制することができます。 UTF-8のデフォルトBOMは、バイトシーケンス0xEF,0xBB,0xBFです。だから、文字列に最初のバイトとして"\xEF\xBB\xBF"を入れるだけで解決できると思うかもしれません。しかし確かにそれは簡単すぎるだろうか? ;-)この問題は、JavaScriptがそれらの文字を文字として受け取らないようにする方法です。 「解決法」は、Special Characters (JavaScript)で言及されているように、「ユニバーサルBOM」"\uFEFF"を使用しています。

例:

var csvString = 'ı,ü,ü,ğ,ş'; 
 
var universalBOM = "\uFEFF"; 
 
var a = window.document.createElement('a'); 
 
a.setAttribute('href', 'data:text/csv; charset=utf-8,' + encodeURIComponent(universalBOM+csvString)); 
 
a.setAttribute('download', 'example.csv'); 
 
window.document.body.appendChild(a); 
 
a.click();

Adding UTF-8 BOM to string/Blobを参照してください。

これを使用すると、エンコードが正しく行われます。それにもかかわらず、これはあなたのWindowsロケール設定のカンマがデフォルトのリストセパレータである場合にのみ正しく動作します。そうでない場合は、ロケール設定のセミコロンがデフォルトの区切り文字である場合、すべてのコンテンツはコンマで区切られずに最初の列に表示されます。次に、CSVでもセミコロンを区切り記号として使用する必要があります。しかし、これは別の問題であり、ではなくを使用して、のファイル(*.xlsまたは*.xlsx)を直接作成できるライブラリを使用しても、CSVを使用するという結論に至ります。

+0

私はCSVファイルを開くために** WPS Office Spreadsheet **を使用していますが、このプログラムはまだ文字を正しく表示していません。 ** Microsoft Office Excel **でCSVファイルを開こうとしましたが、正常に動作しました。だから私は私の問題を理解した。手伝ってくれてありがとう。 –

+0

ExcelがUTF-8エンコーディングでファイルを開くのにはうまくいきますが、保存(Ctrl + S)を押すとCSV utf-8ファイルではなくTSVテキストファイルとして保存されます。あなたはこの問題にまったく遭遇しましたか? – Dylan

+1

@Dylan:はい、これは別の質問で、Excelアプリケーション内のMicrosoftフォールトで、CSV UTF-8をエンコードできません。私の答えの最後の文も見てください。 –