Как прочесть .csv файл в nodejs в русской кодировке "windows-1251"?

Использую nodejs + exceljs и это отлично работает для файлов .xlsx в кодировке "windows-1251", но когда дело доходит до чтения .csv в кодировке "windows-1251", кодировка становится нечитабельна.

Кто-нибудь сталкивался с подобной проблемой?

Есть ли у вас примеры работающего кода на nodejs, который умеет читать .csv в кодировке "windows-1251" без искажений русского текста?


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

Автор решения: DiD

Попробуй так.

    const data = cp1251toutf8(fs.readFileSync('/path'));

    function cp1251toutf8(buf){
        if(buf instanceof ArrayBuffer) buf = new Uint8Array(buf);
        if(!Array.isArray(buf)) buf = [...buf];
        const map = new Map([
            [128,1026], [129,1027], [130,8218], [131,1107], 
            [132,8222], [133,8230], [134,8224], [135,8225],
            [136,8364], [137,8240], [138,1033], [139,8249], 
            [140,1034], [141,1036], [142,1035], [143,1039], 
            [144,1106], [145,8216], [146,8217], [147,8220], 
            [148,8221], [149,8226], [150,8211], [151,8212], 
            [152,null], [153,8482], [154,1113], [155,8250], 
            [156,1114], [157,1116], [158,1115], [159,1119], 
            [160, 160], [161,1038], [162,1118], [163,1032], 
            [164, 164], [165,1168], [166, 166], [167, 167], 
            [168,1025], [169, 169], [170,1028], [171, 171], 
            [172, 172], [173, 173], [174, 174], [175,1031], 
            [176, 176], [177, 177], [178,1030], [179,1110], 
            [180,1169], [181, 181], [182, 182], [183, 183], 
            [184,1105], [185,8470], [186,1108], [187, 187], 
            [188,1112], [189,1029], [190,1109], [191,1111]
        ]);
        return buf.map(c=>c<127?c:c>191?c+848:map.get(c)||0)
            .map(c=>String.fromCharCode(c)).join('');
    }
→ Ссылка