查找组合符号的unicode ID

时间:2019-06-04 13:46:55

标签: unicode utf-8 utf-16

我尝试了解Unicode如何代表符号的特定组合。 例如,如果我结合以下三个Devengari(hindi)符号:

  

न+◌्(diacritical combination symbol)+न

我应该得到以下one (second link here)

  

न्न

现在,对于前三个符号,我能够在Windows中使用Character Map找到相应的Unicode符号,我得到了:

  

न-> UTF-16编码:0x0928

     

◌्-> UTF-16编码:0x094D

或者等价于Unicode xml表示形式:

  

न->“&#2344”;

     

◌्->“&#2381”;

现在,尽管我努力寻找这三者的组合,但我没有 成功,无论如何,这个符号न्न必须具有Unicode表示形式,对吧?

谢谢。

3 个答案:

答案 0 :(得分:2)

Unicode是关于字符“代码”的。与字形无关(因此数字)。

Unicode代码点有不同的解释。通常是可打印字符或组合字符(将修改先前的字符)。

此外,字体还可以合并其他字符(不仅可以合并Unicode代码点)。在拉丁文字(印刷体字母)上很少出现这种情况,但是在印度语言中是这样。但是印度语言在如何组合或合并字符方面也有不同的规则。您可以使用字体,语言修饰符(例如HTML)或/和zero width non-joinerzero width joiner来定义它。这些标志着意图:您想让两个字符显示为独立字符(即noo-joiner),还是希望它们显示为组合字符(如果字体更喜欢不相交的组合)。

您可能需要阅读Unicode: Official Scripts of India及后续章节。您将深入了解印度脚本如何与Unicode一起使用,并获得大量的例外和规则(Unicode也适用于较旧的实际语言版本)。

注意:有一个DEVANAGARI LETTER NNNA ऩ和DEVANAGARI LETTER NNAण。我不懂印度语言,但是NNA应该像您的角色吗? (但它们似乎完全不同)。

但是,正如您在我的链接文档(来自Unicode)中所看到的那样,您看到关于如何混合代码点有许多规则和例外(和建议)。对于Unicode来说,这不是一种简单的语言,而对于字体设计人员来说,它却更为复杂。

答案 1 :(得分:2)

您的符号是一个三重组合(Python用于常规和命名):

>>> from unicodedata import ud
>>> s='न्न'
>>> len(s)
3
>>> for c in s: print(f'{c}   U+{ord(c):04X} {ud.name(c)}')
... 
न   U+0928 DEVANAGARI LETTER NA
्   U+094D DEVANAGARI SIGN VIRAMA
न   U+0928 DEVANAGARI LETTER NA

其字形没有单个Unicode字符。规范化尽可能合并代码点:

>>> len(ud.normalize('NFC',s))
3

答案 2 :(得分:-1)

首先让我们准确定义一些术语。

Unicode区分了字符和字素(或字素簇)。您在谈论符号,但实际上是指字符。符号只是字符的属性:

U+0928 ‹न› \N{DEVANAGARI LETTER NA} Other_Letter
U+25CC ‹◌› \N{DOTTED CIRCLE} Other_Symbol
U+094D ‹◌्› \N{DEVANAGARI SIGN VIRAMA} Combining_Mark

每个字符都有一个数字ID(四个或五个十六进制数字),称为代码点。


前面所有内容都是低级详细信息,无需涉及最终用户或处理文本的程序员,它仅与少数为编程语​​言实现Unicode的程序员相关。 (不幸的是,大多数软件-包括编程语言-都已损坏,设计不当或实现不当,因此抽象性泄漏。)一种Unicode级别的न्न由两个字素组成:

› perl -Mutf8 -E 'say scalar split /\b{g}/, "न्न"'
2
› perl6 -e '"न्न".chars.say'
2
› node -e 'console.log((new(require("grapheme-splitter"))).countGraphemes("न्न"))'
2

(显示3的Python答案不正确。)

在标记文本或使用 Backspace键从右侧开始删除文本时,您仍然可以看到它是两个字素:


न्न渲染为单个字形,因为它是连字。这样的脚本很奇怪,不仅是梵文。 This topic has little to do with Unicode, though, this is the task of the font renderer.因此,您的问题为字形找到Unicode的ID是没有意义的–它在字体文件中只有一个ID。例如,在字体系列“ Noto Sans Devanagari UI”中,可以通过其ID nanadeva找到该字形。