Как принять вывод Windows-команды, вызванной из node.js?

Создадим файл «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 байт свободно


Как этого добиться?
  • Вопрос задан
  • 5293 просмотра
Решения вопроса 1
sdevalex
@sdevalex
Есть команда chcp, которая меняет кодировку терминала в Windows. А вообще лучше конечно не париться, а юзать хорошие вещи в хороших серверных OS.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mark_ablov
@mark_ablov
node-iconv не помогает?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы