类似字母的Unicode符号

729 阅读2分钟

Unicode提供了一种方法来区分那些看起来很像但含义不同的符号。

我们可以用下面的Python代码来说明这一点。

    import unicodedata as u

    for pair in [('K', 'K'), ('Ω', 'Ω'), ('ℵ', 'א')]:
        for c in pair:
            print(format(ord(c), '4X'), u.bidirectional(c), u.name(c))

这就产生了

      4B L LATIN CAPITAL LETTER K
    212A L KELVIN SIGN
     3A9 L GREEK CAPITAL LETTER OMEGA
    2126 L OHM SIGN
    2135 L ALEF SYMBOL
     5D0 R HEBREW LETTER ALEF

尽管K和K看起来很相似,但前者是一个罗马字母,后者是以开尔文为单位的温度符号。同样地,Ω和Ω在语义上是不同的,尽管它们看起来很像。

或者说,它们可能看起来很相似。一种字体可能会也可能不会为不同的代码点使用不同的字形。我用来写这篇文章的编辑器使用的字体在欧姆和欧米伽之间没有区别。如果我仔细观察,字母K和开尔文符号略有不同。这两个阿勒夫看起来有很大的不同。

请注意,数学符号阿勒夫是一个从左到右的字符,而希伯来语的后者阿勒夫是一个从右到左的字符。前者可以用来告诉文字处理器:"这不是真正的希伯来字母;这是一个看起来像希伯来字母的符号。不要改变我的文本方向或切换任何语言敏感的功能,如拼写检查"。

这些类似字母的符号可以用来提供语义信息,但它们也可以被用来欺骗。例如,一个恶意的网站可以将URL中的K改为开尔文符号。

相关文章