Python“denormalize”unicode组合字符

时间:2010-06-27 09:12:00

标签: python unicode

我想在python中标准化一些unicode文本。我想知道是否有一种简单的方法可以在python中获得组合unicode字符的“非规范化”形式?例如如果我有序列u'o \ xaf'(即latin small letter o后跟combining macron),则获得ō(latin small letter o with macron)。从另一个方面来说很容易:

o = unicodedata.lookup("LATIN SMALL LETTER O WITH MACRON")
o = unicodedata.normalize('NFD', o)

2 个答案:

答案 0 :(得分:4)

o = unicodedata.normalize('NFC', o)

答案 1 :(得分:4)

正如我所评论的那样,U + 00AF不是一个组合macron。但您可以使用NFKD转换将其转换为U + 0020 U + 0304。

>>> unicodedata.normalize('NFKD', u'o\u00af')
u'o \u0304'

然后你可以移除空间并通过NFC获得ō。


(请注意,NFKD在分解方面非常积极,某些语义可能会丢失 - 任何“兼容”的东西都会被分离出来。例如

  • '½'(U + 008D)↦'1' '⁄'(U + 2044)'2';
  • '²'(U + 00B2)↦'2'
  • '①'(U + 2460)↦'1'

等)