Incorrect encoding when using child_process spawn or exec on Windows

Using the command dirin Windows CMD will result in the following output:

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

Using execor spawnwill result in the following:

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

Here is my Node Code:

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);
    }
});
+4
source share
1 answer

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

There is a second optional argument for specifying several parameters. Default options:

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

That is, Node uses utf8 by default, while Windows has different code pages for a different language version.

0
source

All Articles