如何查找复合unicode字符的UTF-8引用

时间:2015-06-09 13:12:42

标签: unicode encoding utf-8 character-encoding

在工作中,我遇到了这个问题,我需要找到复合unicode字符 UTF-8参考

有问题的字符是“n”,顶部带有“^”:n。这用unicode用字符“n”(U + 006E)表示,然后是旋律重音(U + 0302)。

我希望找到的是UTF-8中此字符的单一参考

我一直在四处寻找,但我似乎无法找到答案。我觉得很愚蠢,因为找到这么简单的东西似乎并不难。

编辑:所以我认为“n”和“^”的组合可以映射到单个UTF-8代码点(我希望我使用的是术语权)。但是,你向我解释说不然。 谢谢大家的帮助。

卢瓦克。

2 个答案:

答案 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是字节编码。没有为定义单个Unicode代码点,即使Unicode字符串在NFC或NFKC格式中规范化也是如此。如您所知,由代码点U+006E LATIN SMALL LETTER N和代码点U+0302 COMBINING CIRCUMFLEX ACCENT组成。在UTF-8中,U+006E编码为字节0x6EU+0302编码为字节0xCC 0x82