零宽空白的探究

通过这篇博客,你可以了解到以下知识点:
1.什么是零宽空白
2.怎么使零宽空白现身
3.怎么写出零宽空白

注意:

  • 下面的代码,请直接复制!!!
  • 照着敲是不能复现的!
  • 如果复制下面的代码,并没有复现我所述的结果,请坚持看完本文,肯定不会令你失望。
  • 语言方面:我此处给出的例子是java代码,读者可以根据自己所使用的语言,自行编写相应的工具。

引例

首先,给出几个小例子:

		String bString = new String("123‪4"); 
		System.out.println(bString.length()); 

 
 
  • 1
  • 2

看到这个例子,大家可能会会心一笑,这么简单的问题?其实不然,这个长度并不是4,而是5!复制上面的代码,并且运行的时候,看到输出的结果是5,是不是感觉自己的认知受到了颠覆?
再来个例子:

		String cString = new String("123​4");
		System.out.println(cString.length()); 

 
 
  • 1
  • 2

可能又让大家觉得疑惑了,这和上面的有什么区别呢?如果大家复制并运行的话,会发现结果也是5,从结果来看并没有不同。但是此例中与上例中的“零宽空白”并不是同一个!
不卖关子了,下面给大家讲下为什么会这样:

什么是零宽空白

前言

  1. 百度百科没有收录这个名词,维基百科收录了.
  2. 零宽空白是一个实实在在的字符,不是“幽灵”,不是“玄学”

正文:

  • 在维基百科的介绍中,零宽空白的学术名称是:“Zero-width space”,简称(ZWSP),是一个 ”非打印字符“,所以是不能被看见的。可以用来分隔字符,占位等。
  • 它是一个普通的Unicode字符,它的Unicode字符编码是: U+200B
  • 它的Html实体编码是:&#8203 ; 这里注意下,因为浏览器认识这个字符并且会自动解析成空白,所以我在“&#8203”和“;”之间插入了一个空格,避免被浏览器解析。读者请注意此处。

另外: 不显示的字符并非只有“Zero-width space”,它还有一些兄弟姐妹!我在引例中提及的两个例子中,里面的不显示字符是不同的!下面再给大家介绍另一个不显示的字符:

  • 它的学名是:'LEFT-TO-RIGHT EMBEDDING
  • Unicode字符编码是:U+202A
  • html实体编码: &#8234 ;

在Unicode中,还有很多的不显示字符(我在最后的补充会提到)!!!大家有点疑惑,为什么要有这种东西的存在?这不是坑人嘛!其实不然,这些字符都是由=有特殊的用途的!比如填充、占位、控制文字显示的方向(从左向右,从右向左等)等等,这些字符大量用在排版中。那么问题又来了,怎么才能知道字符串中是否包含这些“小精灵”?下面就向大家介绍几种我自己总结的方法:

怎么使零宽空白现身

  1. Html页面
    查看html中这些字符是最简单的!直接在页面中右键-检查网页源码,就能看到他们的真身;

在这里插入图片描述

在这里插入图片描述
如上图,读者可以看到这么多种的不显示字符!

  1. 写代码时
    可能大家有些字符串,是从别处直接拷贝而来,出现了“令人震惊”的现象时,怎么查看呢?
    这里我给大家提供两个方法:
  • 一:查看字符串的Unicode编码
public static String stringToUnicode(String s) {
		String str = "";
		for (int i = 0; i < s.length(); i++) {
			int ch = (int) s.charAt(i);
			if (ch > 255)
				str += s.charAt(i) + ": " + "\\u" + Integer.toHexString(ch) + "\n";
			else
				str += s.charAt(i) + ": " + "\\u00" + Integer.toHexString(ch) + "\n";
		}
		return str;
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

使用这个方法,就可以将字符串的所有Unicode都显示出来,如下图
在这里插入图片描述
就使得3和4之间的“小精灵”现形了!

  • 二:使用键盘的左右键移动光标
    这些不显示的字符,也像普通的字符一样占据这一个真实的位置。所以可以使用键盘上的左右方向键,移动光标来查看这个小精灵的真实位置。
    比如:“123​4” ,首先将你的光标放置在4后面时,按下键盘的左方向键,发现光标移动到了4的前面,说明4和引号之间没有。再次按下左方向键,奇迹发生了,光标没有移动!再次按下左方向键,光标移动到了3的前面,这就表明了3和4之间有一个小精灵。按照此法,就可以判断你的字符串中是否有这些特殊的字符了。

但是,只是能找到这些小精灵,如果我想在些特殊的场合中使用呢?那就请看下面的内容:

怎么写出零宽空白

  1. html
    在html中写出这些字符,其实在上文中已经提及,相信细心的读者也已经发现了。但是我还是要再谈一下:
    我目前有种方法编写这些字符:
    一:使用html的实体编码,比如:&#8203 ;等
    二:在html种直接些Unicode编码,比如:&#x202B ;
    请读者自行比较两者的不同,这里就不再赘述了。

  2. 代码中
    我以java为例,如何直接在字符串中直接编写Unicode编码:

		String  string= "\u200B";
		System.out.println(string);

 
 
  • 1
  • 2

如上面的代码所示,直接在引号中书写 \u + Unicode代码 即可。

补充

  1. 其他小精灵字符:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值