零宽度空白字符

under text

in tech

Published: 2016-11-05

零宽度空白字符(十六进制:​,十进制:​)是一种看不见的空白字符,它是不可打印的字符,虽然没有宽度,但在设置了词间距调整的情况下会在分隔的不同单词间留出空白。

有的网页上插入了看不见的空白字符,如果直接复制会得到意料之外的内容,举个例子:

testdir=`mktemp -d`
touch $testdir/CopyMe.txt
touch $testdir/Copy​Me.​txt
ls $testdir

运行上面的代码会看到两个“同名”文件共存在同一目录下,这个魔术的奥秘就是其中一个文件名中包含了零宽度空白字符。用户可以用命令tr -dc "[:print:]"过滤不可打印字符,以免它们带来麻烦。

如果想了解更多空白字符,可以参考这篇文章,里面列出了7种不同的空白字符:

名称 十进制 十六进制 效果 说明
|| 没有字符
    | | 标准半宽空白字符
      | | 非换行空白字符
      | | 与“n”同宽的空白字符
      | | 与“m”同宽的空白字符
      | | 窄空白字符
​ ​ |​| 0宽度空白字符
    | | 全宽空白字符

(完)