Ваша программа не получает Ā
, вместо этого она получает A
. Я использовал эту программу для проверки:
var n;
for (n = 0; n < process.argv.length; ++n) {
console.log(n + ": '" + process.argv[n] + "'");
}
console.log("length: " + process.argv[2].length);
console.log("code: " + process.argv[2].charCodeAt(0));
console.log("size: " + Buffer.byteLength(process.argv[2]));
На Ubuntu, используя UTF-8 в консоли, я получил:
$ node test.js Ā
0: 'node'
1: '/home/tjc/temp/test.js'
2: 'Ā'
length: 1
code: 256
size: 2
... что правильно.
В Windows 7, используя chcp 65001
и Lucida Console, я получил:
C:\tmp>node temp.js Ā
0: 'node'
1: 'C:\tmp\temp.js'
2: 'A'
length: 1
code: 65
size: 1
Обратите внимание, что Ā
стал A
в некоторый момент пути.
Как я уже сказал в своем комментарии к вопросу, я могу только предположить, что есть какая-то проблема с Lucida Console , или cmd.exe обработкой UTF-8, или, возможно, node.exe
обработкой Unicode из консоли в Windows (я использовал предварительно собранную версию 0.5.7 ).
Обновление : Это может быть чем-то, что нужно для работы с людьми из NodeJS, поскольку Windows, кажется, делает это правильно самостоятельно. Если я помещу этот код в test.vbs
файл:
WScript.Echo WScript.Arguments(0)
WScript.Echo AscW(WScript.Arguments(0))
Я получаю правильный результат:
C:\tmp>cscript /nologo test.vbs Ā
Ā
256
... предполагая, что терминал правильно передает аргумент программе. Так что это может быть проблема со сборкой Windows node.exe
.