这个看不见的空间是如何形成的?

时间:2015-03-03 22:12:56

标签: string

'{FileTitle​}' === '{FileTitle}'
// false

第一个字符串的最后一个e}之间有一个空格

'{FileTitle​}'.length
// 12

'{FileTitle}'.length
// 11

3 个答案:

答案 0 :(得分:2)

在这两个字符之间有代码8203的Unicode字符。这是一个0宽的空间。有关详细信息,请查看相应的Wikipedia article

答案 1 :(得分:2)

这是一个有时令人讨厌的问题的一个很好的例子: - )

如果我将代码复制到TextWrangler,那么我会看到空格。如果我选择“Hex Dump”,那么我会看到十六进制字节0B 20.考虑到小端语境(thx到@axiac),这意味着字符0x200B,十进制8203。

enter image description here

有关特定unicode字符的信息,请使用:http://unicode-table.com/de/search/?q=8203您将看到描述“零宽度空间”。

关于这个角色如何进入你的代码,人们只能猜测。第一种选择是,你在编辑器中无意中通过击中某个键组合来编写它。第二个选项是,您从富文本文档中复制它作为偷渡者。选项三是,它因为一些偶然的多字节字符串操作而到达那里。

相关问题是Ascii 0xA0(或0x00A0),即不可破坏的空间。它无法通过眼睛与普通空间区分开来,但会导致编译器语法错误有时难以解决。

答案 2 :(得分:-1)

这个没有空间 '{FileTitle}'==='{FileTitle}'

您刚刚使用了不同的编码。