steelbrain / exec

Node's Process spawning APIs beautified
MIT License
9 stars 4 forks source link

Unreadable error messages in console by national code pages #95

Open VadimDor opened 7 years ago

VadimDor commented 7 years ago

Error messages in console are not readable at some locales. E.g. by russian locale on Windows we have following for "command not found" error:

""unexisting-command"" �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.

instead of

""unexisting-command"" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

The solution were to decode the message first in module sb-exec file index.js:

reject(new Error((new TextDecoder('IBM866')).decode(data.stderr[0]).trim()));

instead of (e.g. line 41)

reject(new Error(data.stderr.join('').trim()));

The same probably is valid also for stdout (e.g. line 59 there).

To set valid encoding for TextDecoder() is either up to user over API (should be extended) or some package to guess encoding from buffer could be used (e.g. this one https://github.com/sonicdoe/detect-character-encoding ) or first execute some test command on os (e.g. "chcp" on Windows)

Arcanemagus commented 7 years ago

Unfortunately it looks like detect-character-encoding requires being built on Windows, which is unlikely to succeed on most people's machines.

Arcanemagus commented 7 years ago

So far the best I've come up with is running chcp, and hardcoding this table in as a lookup for the real encoding, since the utility that would give that isn't availabe on Windows unless you've installed the resource kit.