Синхронное чтение файла readSync
При попытке синхронного чтения построчно данные считываются неточно(при асинхронном чтении все нормально).
Примерный код fs=require('fs'); var op=fs.openSync("new.txt","r+",777); var pos=0; var line=[]; var rl=fs.readSync(op,100,pos); line.push(rl[0]); pos=pos+rl[1]; rl=fs.readSync(op,100,pos); ..... fs.closeSync(op); Суть проблемы: текст латинскими буквами считывается корректно всегда. Текст кириллицей считывается корректно когда скачиваешь файл в одну строку (Одна операция к примеру -readSync(op,10000,0)). При порционном чтении многострочного кириллического текста или (смешанного) возникают отдельные кракозябры в кириллическом тексте как раз в районе стыка "порций"-как я понимаю. Это баг или что то неверно делаю? |
Решение найдено - естественно надо все делать через буфер - иначе правильно склеить мультибайтные символы не получается
Код примерно такой (для порционного чтения без разбивки на строчки): var buf=new Buffer(400,"utf8"); var op=fs.openSync("new.txt","r+",777); var stripBom=require('strip-bom'); var rl=fs.readSync(op,buf,0,20,0); var ofs=rl; while (rl==20){ rl=fs.readSync(op,buf,ofs,20); ofs+=rl; } var result=stripBom(buf.toString("utf8",0,ofs)); |
Часовой пояс GMT +3, время: 18:53. |