Вам вообще не нужно делать это преобразование: вы используете веб-сервер, который явно не правильно определяет кодировку файла. Он должен правильно идентифицировать его в возвращаемом заголовке Content-Type
(например, Content-Type: text/plain; charset=windows-1251
). См. эту статью от собственного Джоэла Спольски из SO для получения дополнительной информации.
Если вы не можете сделать это по какой-то причине: вы можете прочитать файл в двоичном виде и получить ArrayBuffer
для него через arrayBuffer
в ответе fetch
:
fetch("raw/graph_tab.txt")
.then(response => {
if (!response.ok) {
throw new Error(response.status);
}
return response.arrayBuffer();
})
.then(buffer => {
// ...convert it here...
})
.catch(error => {
// Handle/report error
});
Итак, вопрос в том, что мы делаем для ...convert it here...
. :-) Библиотека, на которую вы ссылаетесь, ожидает получить «байтовую строку», которая, как я предполагаю, такая же, как вы получили бы из readAsBinaryString
метода FileReader
. Если это так, вы можете преобразовать ArrayBuffer
в этот формат следующим образом:
const str = new Uint8Array(buffer).map(byte => String.fromCharCode(byte)).join("");
Итак:
fetch("raw/graph_tab.txt")
.then(response => {
if (!response.ok) {
throw new Error(response.status);
}
return response.arrayBuffer();
})
.then(buffer => {
const str = new Uint8Array(buffer).map(byte => String.fromCharCode(byte)).join("");
console.log(windows1251.decode(str));
})
.catch(error => {
// Handle/report error
});