- 场景复现
在访问 https://dotnet.microsoft.com/zh-cn/apps/aspnet地址时 突然出现
https://dotnet.microsoft.com/zh-cn/apps/aspnet%E2%80%8C%E2%80%8C
但是正常来看,这个地址后面是没有%E2%80%8C%E2%80%8C的,粘贴到idea里发现了url地址后面还拼接了2个unicode字符。
@Test
public void testUnicodeChar() throws Exception {
String str = "https://dotnet.microsoft.com/zh-cn/apps/aspnet\u200C\u200C";
}
- 不可见字符
\u200C\u200C是什么字符
“\u200C\u200C” 中的 “\u200C” 是 Unicode 编码中的零宽度非连接符(Zero Width Non-Joiner,ZWNJ),下面从特点和作用方面具体介绍:
字符特点
不可见性:零宽度非连接符是一种不可见字符,它在文本显示中不占据实际的宽度和空间,不会像普通字符那样直接显示出形状或符号。
零宽度:其主要特点就是宽度为零,不会对文本的排版宽度产生影响,仅在特定的文本处理或显示情境中发挥作用。
主要作用
防止字符连接:在一些语言文字系统中,某些字符在特定情况下可能会自动连接或合并显示。零宽度非连接符可以用来阻止这种自动连接行为,确保字符按照原本的形式显示。比如在阿拉伯语等从右向左书写的语言中,它可以防止特定字符组合在一起形成不期望的连写形式。
文本处理和排版控制:在文本编辑、排版软件或网页设计等场景中,零宽度非连接符可用于精确控制文本的显示和布局。例如,在需要对特定字符或字符组进行特殊处理,使其不与周围字符产生默认的连接或合并效果时,就可以使用零宽度非连接符。
标记特定文本区域:可以作为一种特殊的标记,用于在文本中划分或标识特定的区域或字符组合,以便后续的文本处理、分析或样式应用。比如在进行文本搜索、替换或格式设置时,可利用零宽度非连接符来标记需要特殊处理的文本部分。
“\u200C\u200C” 就是两个连续的零宽度非连接符,可能用于更复杂的文本控制或标记需求,比如强调某个区域内的字符都不应发生连接,或者在特定的文本处理流程中作为一种特殊的分隔标记等。