我尝试了解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表示形式,对吧?
谢谢。
答案 0 :(得分:2)
Unicode是关于字符“代码”的。与字形无关(因此数字)。
Unicode代码点有不同的解释。通常是可打印字符或组合字符(将修改先前的字符)。
此外,字体还可以合并其他字符(不仅可以合并Unicode代码点)。在拉丁文字(印刷体字母)上很少出现这种情况,但是在印度语言中是这样。但是印度语言在如何组合或合并字符方面也有不同的规则。您可以使用字体,语言修饰符(例如HTML)或/和zero width non-joiner
和zero 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
找到该字形。