2013-08-15 6 views
13

मैं जावास्क्रिप्ट का उपयोग कर क्लाइंट साइड पर एक CSV फ़ाइल जेनरेट करने का प्रयास कर रहा हूं। मैंने the answer on this stackoverflow question का पालन किया है। मेरे पास सामग्री में यूनिकोड वर्ण हैं (मेरे मामले में हिब्रू वर्ण)।यूनिकोड वर्णों के साथ जावास्क्रिप्ट के माध्यम से एक्सेल के लिए सीएसवी जेनरेट करें

फ़ाइल पीढ़ी सफल होती है, हालांकि जब मैं Excel में फ़ाइल खोलता हूं - सभी यूनिकोड वर्णों को मजाकिया वर्ण के रूप में दिखाया जाता है। ASCII वर्ण (अंग्रेजी और संख्या) अच्छी तरह से प्रस्तुत किए जाते हैं।

अजीब बात यह है कि अगर मैं नोटपैड में फ़ाइल खोलता हूं, तो यूनिकोड वर्ण अच्छी तरह दिखाते हैं। तो मुझे लगता है कि इसका एक्सेल के साथ कुछ करना है और जिस तरह से मैं फ़ाइल को सहेज रहा हूं।

कोई भी विचार?

+1

में काम करता है यह बाइट आदेश मार्क हो सकता है। क्या यह लिंक मदद करता है? http://stackoverflow.com/questions/155097/microsoft-excel-mangles-diacritics-in-csv-files –

+0

हां हां हां! बीओएम उपसर्ग काम किया! –

उत्तर

29

जैक कोल की टिप्पणी और this question के बाद, मेरी समस्या ने फ़ाइल की शुरुआत में बीओएम उपसर्ग (\ uFEFF) को जोड़ने में क्या तय किया।

यह काम कर कोड है:

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

मेरे लिए काम नहीं करता है। एक्सेल मरना चाहिए। –

+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

सुझाव दिया समाधान सभी ब्राउज़रों के साथ काम नहीं किया है, लेकिन मैं यह सभी ब्राउज़रों (क्रोम, फायरफॉक्स, IE11 और यहां तक ​​कि एज में काम पाने के लिए, ... IE9- के बारे में पता नहीं है एक रास्ता मिल गया 10 क्योंकि मेरे पास अब तक पहुंच नहीं है)।

मुझे encoding.js एन्कोड करने के लिए बाहरी पुस्तकालय का उपयोग करना है और यह यूनिकोड के साथ आश्चर्यजनक रूप से अच्छी तरह से काम करता है (मैं एक्सेल में अपने सीएसवी निर्यात में अपना यूनिकॉर्न इमोजी देख सकता हूं)।

तो यहाँ कोड

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

है और यह है कि यह है, यह IE/Edge/Chrome/Firefox

enter image description here

संबंधित मुद्दे