Проблемы с кодировкой при парсинге CSV при помощи JS

Создал в excel табличку, сохранил в формате csv(разделители - запятые). Содержимое на кириллице. Пытаюсь прочесть ее JS-ом при помощи кода:

         var new;
         $.ajax({

            url: "xls/south_cpo_map1.csv",
            method: 'GET',
            async:false,
            success: function (data) {
              new  = data.split('^^^');
              console.log(new);
            },
            error: function (error) {
                console.log(error);
            }
        });

Получаю на выходе вот такую белиберду: введите сюда описание изображения

Кодировка страницы utf-8, пробовал менять - результата никакого. Единственное, что помогает - открыть файл в блокноте и пересохранить со сменой кодировки на utf-8.

Можно как-то грамотно преобразовать результат чтения csv без танцев с бубном (блокнотом)?


Ответы (1 шт):

Автор решения: Денис Степанов

Скорее всего кодиравка файла cp1251.
Можно использовать TextDecoder, для перевода в utf-8, вот таким образом.

function decode(responseArrayBuffer) {
    const
        dataView = new DataView(responseArrayBuffer),
        decoder = new TextDecoder('windows-1251');
    return decoder.decode(dataView);
}

fetch('xls/south_cpo_map1.csv')
    .then(response => response.arrayBuffer())
    .then(decode)
    .then(console.log)
    .catch(err => console.log(err.message));

JQuery через $.ajax().

function decode(responseArrayBuffer) {
    const
        dataView = new DataView(responseArrayBuffer),
        decoder = new TextDecoder('windows-1251');
    return decoder.decode(dataView);
}

const xhrArrayBuffer = new XMLHttpRequest();
xhrArrayBuffer.responseType = 'arraybuffer';

$.ajax({
    url: 'xls/south_cpo_map1.csv',
    method: 'GET',
    xhr: function() {
        return xhrArrayBuffer;
    },
    success: function (data) {
        console.log(decode(data));
    }
});

→ Ссылка