non-ascii char в качестве аргументов - PullRequest
0 голосов
/ 25 сентября 2011

printargv.js:

console.log(Buffer.byteLength(process.argv[2]));

В cmd.exe (с chcp = 65001, font = 'Lucida Console') я запустил:

node printargv.js Ā 

(Примечание: Unicodeкодовая точка Ā - это U + 0100.) Выведенный скрипт:

1

Я ожидал, что скрипт напечатает число больше 1, но это не так.Кто-нибудь знает почему?

edit: я думаю, что узел неправильно анализирует начальные аргументы для cmd.exe после того, как я попробовал следующий код:

var i = require('readline').createInterface(process.stdin,process.stdout);

i.question('char: ', function(c){
  console.log( Buffer.byteLength(c) );
  i.close();
  process.stdin.destroy();
});

вывод 2

1 Ответ

1 голос
/ 25 сентября 2011

Ваша программа не получает Ā, вместо этого она получает 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...