在Windows下使用child_process spawn或exec时错误的编码

Windows CMD中使用dir命令将导致以下输出:

 Verzeichnis von D:\workspace\filewalker 22.12.2013 17:27 <DIR> . 22.12.2013 17:27 <DIR> .. 22.12.2013 17:48 392 test.js 22.12.2013 17:23 0 testöäüÄÖÜ.txt 22.12.2013 17:27 <DIR> testÖÄÜöüäß 2 Datei(en), 392 Bytes 3 Verzeichnis(se), 273.731.170.304 Bytes frei 

使用execspawn会导致这样的结果:

 Verzeichnis von D:\workspace\filewalker 22.12.2013 17:27 <DIR> . 22.12.2013 17:27 <DIR> .. 22.12.2013 17:48 392 test.js 22.12.2013 17:23 0 test      .txt 22.12.2013 17:27 <DIR> test        2 Datei(en), 392 Bytes 3 Verzeichnis(se), 273.731.170.304 Bytes frei 

这是我的节点代码:

 var exec = require('child_process').exec, child; child = exec('dir', function (error, stdout, stderr) { console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }); 

http://www.nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

有第二个可选的参数来指定几个选项。 默认选项是

 { encoding: 'utf8', timeout: 0, maxBuffer: 200*1024, killSignal: 'SIGTERM', cwd: null, env: null } 

这是节点默认为utf8,而Windows有不同的语言版本的代码页。