Здесь есть несколько возможностей, возможно, ваши входные файлы находятся в многобайтовой кодировке (например, utf8 utf16 et c), и ваш отладчик просто не показывает правильные символы из-за ограничений шрифта.
Я бы попробовал записать переменную заголовка в какой-нибудь тестовый файл, например так:
fs.writeFileSync(`title-test-${x}.txt`, title, "utf8");
и посмотреть, выглядит ли заголовок правильно в вашем текстовом редакторе.
Это также может возможно, что файлы закодированы в расширенной кодировке ascii , такой как Windows 1255 или ISO 8859-8. В этом случае fs.readFileSyn c не будет работать правильно, поскольку он не поддерживает эти кодировки (см. node.js список кодировок )
Если файлы кодируются с использованием Однобайтовое расширенное кодирование ascii, должно быть возможно преобразовать в более переносимое кодирование (такое как utf8).
Я бы порекомендовал для этой цели модуль iconv-lite , с ним можно многое сделать!
Например, для преобразования из Windows 1255 файл в utf8 вы можете попробовать:
const iconv = require("iconv-lite");
const fs = require("fs");
// Convert from an encoded buffer to JavaScript string.
const fileData = iconv.decode(fs.readFileSync("./hebrew-win1255.txt"), "win1255");
// Convert from JavaScript string to a buffer.
const outputBuffer = iconv.encode(fileData, "utf8");
// Write output file..
fs.writeFileSync("./hebrew-utf8-output.txt", outputBuffer);