为什么不应该使用Unicode字符来模拟印刷样式(例如小写字母或脚本)?


129

Unicode包含各种字符,这些字符看起来像是基本拉丁字母的印刷风格化变体,并且允许人们以相应的印刷样式来编写文本,而无需诉诸标记或类似标记。例如,可以模拟:

  • 小帽子:

    ᴛᴛʜɪꜱꜰᴀɴᴄɪʟyᴛᴇᴛxᴛ。

  • 脚本:

    𝓽𝓮𝔁𝓽。

  • Blackletter:

    𝖙𝖊𝖝𝖙。

这在Stack Exchange上引起了人们的兴趣(例如,hereherehere),并对这种技术提出了批评。但是,当我使用它们时会出什么问题?


224
我正在通过手机阅读,看不到最后两个花哨的文字。
Scimonster

22
因为它在某些设备上不可读:i.stack.imgur.com/kM73J.png
克里斯·肯特

15
因为我们中有些人希望以我们认为可读的字体(以及大小,颜色和&c)来查看网页,所以我们使用例如用户CSS样式表来覆盖作者样式。您可能会注意到,即使您的三个示例显示在我的设备上,显然就像您希望它们出现在我的设备上一样,对我来说,它们仍然是可识别的。您为什么将艺术的渴望放在读者的阅读便利之上?
jamesqf

38
这是一个有趣的观察结果:Edge无法在后两个示例中找到文本,而Chrome无法在第一个示例中找到文本。(在两个浏览器中尝试Ctrl + F'ing以获得BEHOLD。)尚未检查Firefox。
分裂

22
@Schism Firefox没有找到它们。看起来Chrome可能在搜索之前使用NFKC / NFKD规范化,从而将脚本和blackletter文本分解为Basic Latin。Firefox似乎没有这样做。Edge ...正在做一些奇怪的事情。
鲍勃

Answers:


224

一般

这些字符不是用于常规的拉丁字母文本,而是用于语音,西里尔字母文本,用作数学符号(表示变量)或类似符号。以基本拉丁字母编码文本的唯一符合Unicode的方式是使用主要用于此目的的字符(即,来自基本拉丁 Unicode块的字符)。

与许多其他标准一样,您应该考虑违反Unicode。而且,Unicode包含了众多的写作系统,用例以及为与其他标准1向后兼容而存在的东西,完全理解其所有动机是一门科学。长话短说,除非您真的真的知道自己在做什么,否则很有可能会出现一些您甚至没有想到的故障。

具体例子

辅助功能

编码文本不仅存在以某种字体呈现。例如,它也可以通过屏幕阅读器进行解释。屏幕阅读器无需猜测

𝓽𝓱𝓮

是指变量𝓽,𝓱和𝓮 的定冠词或数学乘积2,这就是这些字符的用途。因此,最好的行为是将这些字符拼写出来,例如,从字面上说出以下内容:

粗体小字母t,粗体小字母h,粗体小字母e

它不应该只是说“ the”,因为那样会不正确地阅读其符号恰好构成一个发音单词的数学文本。3

可移植性

如果您的文本在计算机上很好地呈现,这并不意味着它也将出现在读者的文本上。最明显的例子是阅读器没有支持这些字符的任何字体,或者文本是由不支持后备字体的软件渲染的。诚然,这变得越来越不常见了。请记住,尽管有些人(例如诵读困难的人)需要特殊的字体,但这些字体不太可能支持这些字符。

但是,即使读者的机器仅使用其他字体,也可能使文本的可读性大大降低。对于第一个示例,这是用两种不同的字体呈现的:

Free用FreeSerif和STIX渲染

当使用特殊字符模拟文本(即模拟连续笔画的笔迹)时,Free Serif会渲染文本,就像您可能希望渲染文本一样。但是,这些字符被用作数学符号,没有意义的连接。因此,专门为数学目的设计的STIX渲染更符合这些字符的使用方式。

第二个示例中,由于某种原因,假设您或读者用斜体“сᴜтмyвᴀʀ”。使用好的字体,您将得到4

сᴜтмy-以竖排和斜体显示。 斜体显示为“暨我的酒吧”

这样做的原因是小写字母(部分)用西里尔字母模拟,而西里尔斜体有时看起来与直立字母大不相同。同样,这是正确的行为。

可搜寻性

作为第一个示例,请考虑对字符𝒲(数学脚本W)进行合理的搜索。假设搜索有两种模式,默认模式精确模式(通常称为区分大小写)。此字符应为:

  • 在默认模式下搜索wW时发现–对于那些不想麻烦在搜索字段中输入或复制特殊字符的用户;

  • 在精确模式下搜索–时发现–对于那些想要搜索数学文档中提到相应变量的地方³;

  • 由于与上述类似的搜索,在精确模式下搜索𝓌,wW时找不到。

但是,如果使用此字符模拟常规文本,则在以精确模式搜索W或should 时应找到该字符,这与上面的内容有冲突。

作为第二个示例,请考虑在搜索拉丁字符时切勿找到西里尔字母,反之亦然,因为它们完全不同。但是,如果不希望破坏可搜索性,则如果使用西里尔字母模拟拉丁小写字母,则需要执行此操作。如果他们搜索一个稀有的拉丁字母单词,恰好与某个流行的西里尔字母单词的假小写字母相对应,那么这将导致人们发现很多无用的东西(反之亦然)。

精确的搜索选项无法解决此问题,因为这些字母中的其他目的保留了该选项。

通常,不可能建立不使用特殊字符来模拟样式化的拉丁文本而不会中断的搜索(没有大量的选项)。


1  您知道XKCD关于统一标准的必然失败吗?好吧,Unicode成功了。
2  或相关约定中的空运算符
3  我知道当今很少有数学文本支持此编码或与其兼容的编码,但关键是希望它们有一天会这样做。滥用Unicode的文本可能仍然存在,然后阅读。
4  除非您要本地化为马其顿语或塞尔维亚语,否则会得到不同但仍然不理想的结果。


评论不作进一步讨论;此对话已转移至聊天
Journeyman Geek

1
那第三个例子呢?为什么黑字文本甚至只以某种字体存在于Unicode中?
posfan12'2013/

2
@ posfan12:它用作独特的数学字母-类似于脚本字符。(请注意,此处的示例编号与问题中的要点无关。)
Wrzlprmft

3
您的小CPAS示例提出了一个难题/竞争:找到一个有效的句子,当它变成斜体时变成不同的句子...(例如,这两种语言都是由拉丁文的读者解释的)
Hagen von Eitzen

67

有什么问题吗?好吧,我看到了这个:

在此处输入图片说明

在Windows 7的Firefox 50.1.0中。

用户Chris Kent评论中提供的图像进一步说明了缺少字形(在这种情况下是在移动设备上)的问题,我从原始图像中裁剪并调整了尺寸:

在此处输入图片说明

而用户oals亲切贡献另一个例子:

在此处输入图片说明



7
@Lilienthal我对您必须走了多少年而不检查或安装更新印象深刻。我的意思是,我仍在某些设备上使用基于Firefox 3.5的功能,但是我没有其他选择(设备太好了,但是没有可用的新浏览器)
mtraceur

16
@Lilienthal在2020年的某个时候,Firefox主版本号可能需要64位数字。此后不久,版本号将比实际程序占用更多空间。为了重新获得市场份额,Chrome版本号需要整个星球来存储。
Andrew Morton

2
你们不知道您使用这种古老的浏览器会暴露给自己多少已知的和活动的安全漏洞?
扎克·利普顿

3
@Zach Lipton:您是否知道我的优先事项排在首位?#1有我可以实际使用的东西。尽管也许Firefox人们(以及许多其他人)已经接受了一个新的范例:通过不可用性实现安全性。
jamesqf

29

我对此有XY问题。

Y和X看起来比其余文本小

在这里,我们看到Y和X看起来小于文本的其余部分。在某些缩放级别上,它们看起来是相同的大小,但这似乎暴露了这种特定字体中的这些特定字形的问题。


对于您所看到的内容,我可以提供三种可能的解释:1)提示不正确。2)后备字体用于xy以外的所有内容3)不良的字体设计:小写字母的大小设计成比小写字母稍大(这是一个不错的选择),然后用于拼音和西里尔Unicode字符–这不是一个好选择,因为例如在拼音使用中,这些字符必须与基本的拉丁字符保持一致。—无论哪种方式:点1)和3)都不是由于Unicode滥用引起的。点2)在其他答案中已经解决。
Wrzlprmft

12
@Wrzlprmft:根据定义,它们是Unicode滥用,因为Unicode没有大写字母。unicode确实具有在拼音字母块和Latin Extended-D块中看起来像小写字母的字母。具体来说,两个语音块和拉丁扩展D块都不包含看起来像小写字母X的字母,因此我的猜测是X来自其他地方,可能是西里尔字母。差异不是由1、2或3引起的。这是由属于另一个字母的字母引起的。
slebetman

@slebetman:小瓶盖X只是一个普通的小写字母X(你可以将角色从问题只是复制和自我检查它)。小写的x必须与语音字符保持一致,因为它也用作语音字符。它也应该具有与西里尔字母的小写字符相同的高度,因为您不希望单个西里尔字母的单词在拉丁文字中脱颖而出(反之亦然)。
Wrzlprmft

19
因“ XY问题”而大声笑:)
Andrew Morton

13

使用看起来有点像拉丁字符的非拉丁字符会使您成为垃圾邮件制造者,色情贩子和谁知道它们将要成为谁的反叛者,他们希望其文本不可搜索,不可索引且可斥责。(“我从未说过这是安全的!我说这是sigma-alpha-integral-sign-epislon !!!不能起诉我!!”)

如果您在那个俱乐部很舒服,那就去吧。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.