Javascript 输出相同但字符长度不同
我有这个剧本:Javascript 输出相同但字符长度不同,javascript,node.js,casperjs,Javascript,Node.js,Casperjs,我有这个剧本: var last_build_no = this.getTitle(); var plain_build_no = "#53 "; console.log(last_build_no.length); console.log(plain_build_no.length); 这是输出: 5 4 '#53 ' '#53 ' 造成这种差异的原因是什么?如何将这些字符串转换为相同的格式 由于这种差异,我的测试用例失败了,但我看到的字符串看起来是一样的
var last_build_no = this.getTitle();
var plain_build_no = "#53 ";
console.log(last_build_no.length);
console.log(plain_build_no.length);
这是输出:
5
4
'#53 '
'#53 '
造成这种差异的原因是什么?如何将这些字符串转换为相同的格式
由于这种差异,我的测试用例失败了,但我看到的字符串看起来是一样的:
test.assertEquals(last_build_no, plain_build_no, "Last Build page has expected title");
字符串包含零宽度的空格。如果记录字符代码,则可以看到:
last_build_no.split("").forEach(c => console.log(c.charCodeAt(0)));
/*
Outputs:
35
53
8203 <-- http://www.fileformat.info/info/unicode/char/200b/index.htm
51
32
*/
有关更多信息,请参见看起来您可能有一个宽字符,请确保两个字符使用相同的编码,例如UTF8。我正在查找这个字符。脚本文件具有utf-8编码。如何将两个字符串转换为相同的编码格式?第一个“53”包含介于5和3之间的。也许你可以去掉所有的空白?或者,您可以将其与同样具有零宽度空间的字符串进行比较。宾果!也许你可以写一个答案,这样我就可以接受了。
var last_build_no = '#53 '.replace(/[\u200B-\u200D\uFEFF]/g, '');
console.log(last_build_no.length); // Output: 4