Создадим файл «
index.js» нижеследующего вида:
require('child_process').exec('dir', function(err, outstr){
console.log(outstr);
});
После этого вывод команды «
node ./», запущенной из русифицированной Windows, будет нижеследующим:
??? ? ?????? U ????? ????? USBSTICK
?????? ????? ??: 467B-0CBE
???????? ????? U:\Fido\Soft\_Sources\node
24.11.2011 15:12 <DIR> .
24.11.2011 15:12 <DIR> ..
25.11.2011 09:36 522 index.js
1 ???? 522 ????
2 ????? 17?412?767?744 ???? ??????
Примерно то же самое получим и в файле, если вести запись не в консоль, а в тестовый файл:
var fs = require('fs'); // file system
require('child_process').exec('dir', function(err, outstr){
fs.createWriteStream('testfile.txt', {
flags: 'w',
encoding: 'binary'
}).write(outstr);
});
Спрашивается: как быть и что делать, чтобы получить от процесса текст в произвольной кодировке? Очевидно, Node.js не ожидает, что команда «
dir» выплёвывает текст в CP866, и оттого недетски обламывается. Надобно заставить Node.js принять русский текст:
U:\Fido\Soft\_Sources\node>dir
Том в устройстве U имеет метку USBSTICK
Серийный номер тома: 467B-0CBE
Содержимое папки U:\Fido\Soft\_Sources\node
24.11.2011 15:12 <DIR> .
24.11.2011 15:12 <DIR> ..
25.11.2011 09:37 522 index.js
1 файлов 522 байт
2 папок 17 412 767 744 байт свободно
Как этого добиться?