Как я инвертирую разложение Unicode с помощью Python?

Патч был принят для этого недавно и должен скоро появиться в 3.3.6 и 3.4.1 согласно этому отчёту о проблеме .

6
задан msanders 15 January 2009 в 10:08
поделиться

3 ответа

Я думаю, что Вы ищете это:

>>> import unicodedata    
>>> print unicodedata.normalize("NFC",u"c\u0327")
ç
7
ответ дан 8 December 2019 в 18:43
поделиться

К сожалению, кажется, что я на самом деле имею (например), \u00B8 (седиль) вместо \u0327 (комбинирующий седиль) в моем тексте.

Eurgh, противный! Можно все еще сделать это автоматически, хотя процесс не был бы совершенно без потерь, поскольку это включает разложение совместимости (NFKD).

Нормализуйте U+00B8 к NFKD, и Вы будете следовать за пространством U+0327. Вы могли затем просканировать через строку, ища любой случай space-followed-by-combining-character и удалить пространство. Наконец реконструируйте к NFC для помещения комбинированных символов на предыдущий символ вместо этого.

s= unicodedata.normalize('NFKD', s)
s= ''.join(c for i, c in enumerate(s) if c!=' ' or unicodedata.combining(s[i+1])==0)
s= unicodedata.normalize('NFC', s)
5
ответ дан 8 December 2019 в 18:43
поделиться

Я не могу действительно дать Вам категорический ответ на Ваш вопрос, потому что я никогда не пробовал это. Но в стандартной библиотеке существует unicodedata модуль. Это имеет две функции decomposition() и normalize() это могло бы помочь Вам здесь.

Править: Удостоверьтесь, что это действительно анализируется unicode. Иногда существуют странные способы записать символы, которых нельзя непосредственно выразить в кодировании. Как "a который предназначен, чтобы быть мысленно проанализированным человеком или некоторой специализированной программой как ä.

1
ответ дан 8 December 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: