零宽空格与零宽不连字的区别

7

实际使用中,零宽度空格(U+200B)和零宽度非连接符(U+200C)有何不同?

我已经阅读了维基百科文章,但我无法理解这些字符是否可以互换。

我认为它们完全可以互换,但我不明白为什么Unicode集中有两个而不是一个。


4
零宽不连字符(zero width non joiner)可以分隔连字号,但不会产生单词间断。零宽空格则是单词间断标记,在一些不使用空格分隔单词的语言中被使用。 - Raymond Chen
2个回答

7

零宽度不连字几乎不存在。它的唯一目的是将事物分成两个部分。例如,123 零宽度不连字 456 是两个数字之间没有任何东西。

零宽度空格是一个空格字符,只是非常非常窄。例如,123 零宽度空格 456 是两个数字之间有一个空格字符。


1
所以它有点类似于<b>与<strong>的区别。除了在语义上看起来相同之外,它们是不同的。比如零宽空格应该在正则表达式中匹配\s,而非连接符则不匹配。此外,在浏览器支持方面也可能存在差异。 - skyboyer
2
123 零宽不连字符 456 是一个数字(123456),在3和4之间没有连字。通常情况下,那里不会有连字,因此在该示例中使用是多余的。 - Raymond Chen
@RaymondChen 好的,假设我们有一些文本可以使用连字,例如 of one-of-these-special-characters ficial。我们可以使用 U+200B(我没有测试过)来防止 fi 之间的连字,也可以使用 U+200C。那么,它们有什么区别呢?(嗯,也许当我们使用 U+200B 时,我们有两个不同的单词 official,而使用 U+200C 时只有一个单词 official?) - john c. j.
1
实际上,不完全正确。零宽度非连接符将防止字符“连接”。例如,“fi”连字中的f和i将不会连接。但真正的用途是用于复杂的脚本(大多数印度脚本、阿拉伯语和其他一些脚本)。还有一个匹配的“零宽度连接符”。您可以随时查看源代码:http://www.unicode.org/versions/Unicode10.0.0/UnicodeStandard-10.0.pdf(第373页、422页、452页等,只需搜索“零宽度非连接符”和“零宽度连接符”即可) - Mihai Nita
1
@johnc.j. 这个回答根本没有回答问题,你能把另一个回答标记为正确答案吗?问题是“从实际角度来看,ZWSP和ZWNJ有什么区别?”,而正如另一个回答所解释的,“零宽空格(ZWSP)可以做到ZWNJ所能做的一切,但它还可以为换行创造机会。”这些基本信息在这个回答中根本没有提到。 - Han Seoul-Oh
显示剩余2条评论

5

零宽度不连字符(ZWNJ)仅中断连字。在拉丁字母中很难注意到,但在显示某些特定小写字母组合的衬线字体中最常见。有一些字母表,如阿拉伯语abjad,非常频繁地使用连字。

连字fi的示例

零宽度空格(ZWSP)实现了与ZWNJ相同的功能,同时还创建了换行机会。非常适合显示文件路径和长URL,但要注意可能会导致复制粘贴出现问题。

顺便说一句,我在Python 3.8和Javascript 1.5中测试了正则表达式匹配,没有一个能够匹配\s。Unicode将这些字符视为格式化字符(类似于方向标记等),而不是空格/标点符号。该Unicode块中还有其他代码点(例如窄间距,U+2009),被视为Unicode中的空格并匹配\s


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接