मुझे सीएसवी फ़ाइल द्वारा तालिका निर्यात करना है।

Csv फ़ाइल डेटा ब्लॉब प्रकार द्वारा सर्वर से है।

Blob {size: 2067, type: "text/csv"}
async exportDocumentsByCsv() {
    this.commonStore.setLoading(true)
    try {
      const result = await DocumentSearchActions.exportDocumentsByCsv({
        searchOption: this.documentSearchStore.searchOption
      })

      // first
      // const blob = new Blob([result.body], { type: 'text/csv;charset=utf-8;' })

      // second
      // const blob = new Blob([`\ufeff${result.body}`], { type: 'text/csv;charset=utf-8;' })
      const blob = result.body
      console.log('result.body', result.body)
      const fileName = `document - search - result.csv`
      if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        // for IE
        window.navigator.msSaveOrOpenBlob(blob, fileName)
      } else {
        FileSaver.saveAs(blob, fileName)
      }
      this.commonStore.setLoading(false)
    } catch (err) {
      alert(err.errorMessage)
      this.commonStore.setLoading(false)
    }
  }

मुझे अपनी भाषा के कारण utf-8 या फिर सेट करना होगा।

मैंने इस समस्या को ठीक करने की कोशिश की, लेकिन मुझे नहीं पता कि इसे कैसे ठीक किया जाए।

मैंने \ufeff का उपयोग करके इस समस्या को ठीक करने की खोज की, लेकिन जब मैं इस तरह का उपयोग करने का प्रयास करता हूं दूसरा तरीका, यह मेरे लिए काम नहीं करता है।

| [object  | Blob]  |
1
kkangil 29 अप्रैल 2019, 08:43

1 उत्तर

सबसे बढ़िया उत्तर

ब्लॉब आपके लिए एन्कोडिंग का ध्यान नहीं रखता, वह केवल बाइनरी डेटा देखता है। यह एकमात्र रूपांतरण है यदि आप कंस्ट्रक्टर की BlobsList . में UTF-16 DOMString में पास करते हैं

आपकी स्थिति में सबसे अच्छा यह है कि आपके एप्लिकेशन में सर्वर से सामने तक सब कुछ UTF-8 के रूप में सेट किया जाए और यह सुनिश्चित किया जाए कि सब कुछ UTF-8 का उपयोग करके भेजा जाए। इस तरह, आप सर्वर की प्रतिक्रिया को सीधे सहेजने में सक्षम होंगे, और यह UTF-8 में होगा।

अब, यदि आप किसी पाठ फ़ाइल को ज्ञात एन्कोडिंग से UTF-8 में कनवर्ट करना चाहते हैं, तो आप TextDecoder, जो किसी दिए गए एन्कोडिंग से DOMString में बाइनरी डेटा के ArrayBuffer दृश्य को डीकोड कर सकता है, जिसका उपयोग तब UTF-8 ब्लॉब उत्पन्न करने के लिए किया जा सकता है:

/* const data = await fetch(url)
  .then(resp=>resp.arrayBuffer())
  .then(buf => new Uint8Array(buf));
*/
const data = new Uint8Array([147, 111, 152, 94 ]);
// the original data, with Shift_JIS encoding
const shift_JISBlob = new Blob([data]);
saveAs(shift_JISBlob, "shift_JIS.txt");

// now reencode as UTF-8
const encoding = 'shift_JIS';
const domString = new TextDecoder(encoding).decode(data);

console.log(domString); // here it's in UTF-16


// UTF-16 DOMStrings are converted to UTF-8 in Blob constructor
const utf8Blob = new Blob([domString]);
saveAs(utf8Blob, 'utf8.txt');


function saveAs(blob, name) {
  const a = document.createElement('a');
  a.href = URL.createObjectURL(blob);
  a.download = name;
  a.textContent = 'download ' + name;
  document.body.append(a);
}
a{display: block;}
1
Kaiido 29 अप्रैल 2019, 06:18