在工作中,我遇到了这个问题,我需要找到复合unicode字符的 UTF-8参考。
有问题的字符是“n”,顶部带有“^”:n。这用unicode用字符“n”(U + 006E)表示,然后是旋律重音(U + 0302)。
我希望找到的是UTF-8中此字符的单一参考。
我一直在四处寻找,但我似乎无法找到答案。我觉得很愚蠢,因为找到这么简单的东西似乎并不难。
编辑:所以我认为“n”和“^”的组合可以映射到单个UTF-8代码点(我希望我使用的是术语权)。但是,你向我解释说不然。 谢谢大家的帮助。
卢瓦克。
答案 0 :(得分:4)
如果您希望字符串尽可能合成,那么您希望它在NFC中(标准化表单组合,请参阅Unicode equivalence)。您可以在Python using this example中执行此操作:
#!/usr/bin/python3
import unicodedata
for s in ['Jalapen\u0303o', 'n̂']:
print(s)
print(ascii(s))
print('NFC:', ascii(unicodedata.normalize('NFC', s)))
print('NFD:', ascii(unicodedata.normalize('NFD', s)))
print('')
这会给你:
墨西哥辣椒
'Jalapen \ u0303o'
NFC:'Jalape \ xf1o'
NFD:'Jalapen \ u0303o'
名词
'N \ u0302'
NFC:'n \ u0302'
NFD:'n \ u0302'
正如您所看到的,虽然'ñ'同时具有组合和分解形式,但'n'却没有。它的唯一形式被分解为两个独立的字符。
答案 1 :(得分:1)
对于单个 Unicode代码点的序列,UTF-8是字节编码。没有为n̂
定义单个Unicode代码点,即使Unicode字符串在NFC或NFKC格式中规范化也是如此。如您所知,n̂
由代码点U+006E LATIN SMALL LETTER N
和代码点U+0302 COMBINING CIRCUMFLEX ACCENT
组成。在UTF-8中,U+006E
编码为字节0x6E
,U+0302
编码为字节0xCC 0x82
。