Проблема со специальными символами в файле Excel для CSV, Sheetjs добавляет спецификацию для файлов CSV utf8

Я использую библиотеку https://www.npmjs.com/package/xlsx для создания CSV. .

Это окончательный код для написания кода CSV.

let workbook: WorkBook = this.workBookCreator.getWorkbook(workBookName);

return this.xlsxModule.write(workbook, {
     bookType: format,
     type: "buffer"
});

И это будет загружено в корзину S3.

Скачать файл

window.location.href = fileLocation;

Где fileLocation – предварительно подписанный URL-адрес S3 с запросом GET.

Когда загруженный файл открывается в Microsoft Excel, специальные символы искажаются из-за того, что кодировка UTF-8 не распознается EXCEL.

Может ли кто-нибудь помочь мне, как я могу установить кодировку UTF-8 при создании CSV для поддержки всех специальных символов в Excel?

До сих пор я пробовал следующие решения:

  1. Пробовал изменить тип буфера XLSX
  2. Добавлены IconV и IconV-lite для преобразования буфера.
  3. Изменен Content-type файла корзины S3.
  4. Пытался изменить тип буфера на строку

Я знаю, что мы можем добавить спецификацию в файл CSV во время записи. Но не смог найти, откуда я могу добавить.


person Hardik Shah    schedule 09.10.2020    source источник
comment
С какими проблемами вы столкнулись, когда пробовали различные методы, рекомендованные на этом форуме для решения подобных вопросов? На мой взгляд, два метода включают в себя запись спецификации в файл; импорт в Excel, возможно, с помощью Power Query.   -  person Ron Rosenfeld    schedule 09.10.2020
comment
@RonRosenfeld Я обновил вопрос своими попытками. Не могли бы вы указать мне ссылку на Power Query? Или можно, пожалуйста, подробнее?   -  person Hardik Shah    schedule 10.10.2020
comment
PQ доступен в Excel 2010+ (как бесплатная надстройка MS в 2010-2013, встроенная в 2016+). При импорте с использованием PQ будет возможность установить происхождение файла. IIRC, 65001 для UTF8.   -  person Ron Rosenfeld    schedule 10.10.2020
comment
То есть я не хочу заставлять пользователей выполнять действия вручную.   -  person Hardik Shah    schedule 12.10.2020
comment
Затем вам придется либо настроить его как обновляемый запрос, либо убедить своих пользователей импортировать, а не открывать файл; или вам придется выяснить, как добавить BOM в файл при его создании. Чтобы сделать последнее, я предлагаю вам выполнить поиск в Интернете. Sheetjs prepend bom for utf8 csv files выдал около 10 000 результатов в Google.   -  person Ron Rosenfeld    schedule 12.10.2020


Ответы (1)


Итак, наконец, я нашел решение (перепробовал слишком много поиска в Google)

Я использовал iconv-lite пакет npm

А вот и код:

const txt = '\uFEFF'+ iconV.decode(CSVString, 'utf8');
CSVString = iconV.encode(txt, 'utf8');

Надеюсь, я смогу спасти чей-то день!

person Hardik Shah    schedule 12.10.2020