printargv.js:
console.log(Buffer.byteLength(process.argv[2]));
在cmd.exe(chcp = 65001,font ='Lucida Console')中,我跑了:
node printargv.js Ā
(注意:Â的unicode代码点是U + 0100。)输出的脚本:
1
我希望脚本能够打印大于1的数字,但事实并非如此。有谁知道为什么?
编辑: 我认为在我尝试下面的代码后,节点'错误地'解析'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
答案 0 :(得分:1)
您的计划未收到Ā
,而是收到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
......这是正确的。
在使用chcp 65001
和Lucida Console的Windows 7上,我得到了:
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上的控制台(我使用pre-built 0.5.7 version)。
更新:这可能与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
版本的问题。