Заранее извиняюсь за нубовский вопрос.
Столкнулся с новой для меня проблемой программируя под NodeJS (платформа имеет значение?). Предположим, есть большой файл, в котором содержится список строк, которые нужно прочесть и каждую проанализировать и сохранить. Файл имеет довольно большой объем, содержит кириллицу и хранится в кодировке UTF-8.
Для чтения такого файла, естественно, следует использовать бинарно-безопасный способ и анализировать информацию загружая ее по частям.
В nodejs я создаю буфер размером 32кб, читаю, разбиваю по строкам, анализирую, сохраняю. Все вроде работало бы нормально, но… подкрался незаметно. Спустя некоторое время я заметил артефакты в сохраненных результатах работы.
Я сразу понял в чем дело, но не знаю как решить элегантно такую задачу. Дело в том, что символы в кодировке utf-8 имеют разный размер в байтах. А чтение блоками с заданной длинной может «порвать» символ на стыке блоков. Понятное дело, в такой ситуации нужно откинуть последние байты полученной информации, а при чтении следующего блока их прочитать заного.
Вопрос как посчитать кол-во байт, которые нужно откинуть? Был бы хотябы си, php или java, где можно обратиться за помощью к iconv. В NodeJS то как быть… Из арсенала только функция преобразования буфера в строку
buffer.toString('utf8', 0, bytesRead);
Может быть, кто-нибудь сталкивался с такой проблемой?