Как прочесть .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('');
}