Browse Source

feat: add UTF-8 BOM option

Ahmad Kholid 3 years ago
parent
commit
9632a84e46

+ 8 - 0
src/components/newtab/workflow/edit/EditExportData.vue

@@ -41,6 +41,14 @@
         {{ type.name }}
       </option>
     </ui-select>
+    <ui-checkbox
+      v-if="data.type === 'csv'"
+      :model-value="data.addBOMHeader"
+      class="mt-2"
+      @change="updateData({ addBOMHeader: $event })"
+    >
+      Add UTF-8 BOM
+    </ui-checkbox>
   </div>
 </template>
 <script setup>

+ 8 - 2
src/utils/data-exporter.js

@@ -36,7 +36,7 @@ export function generateJSON(keys, data) {
   return result;
 }
 
-export default function (data, { name, type }, converted) {
+export default function (data, { name, type, addBOMHeader }, converted) {
   let result = data;
 
   if (type === 'csv' || type === 'json') {
@@ -54,8 +54,14 @@ export default function (data, { name, type }, converted) {
     ).join(' ');
   }
 
+  const payload = [result];
+
+  if (addBOMHeader) {
+    payload.unshift(new Uint8Array([0xef, 0xbb, 0xbf]));
+  }
+
   const { mime, ext } = files[type];
-  const blob = new Blob([result], {
+  const blob = new Blob(payload, {
     type: mime,
   });
 

+ 1 - 0
src/utils/shared.js

@@ -318,6 +318,7 @@ export const tasks = {
       refKey: '',
       type: 'json',
       description: '',
+      addBOMHeader: false,
       dataToExport: 'data-columns',
     },
   },