Нормализация юникода на Python: правильно ли перевести u '\ xb4' на u '\ u0301'

посмотрите следующий фрагмент:

>>> import unicodedata >>> from unicodedata import normalize, name >>> normalize('NFKD', u'\xb4') u' \u0301' >>> normalize('NFKD', u'a\xb4a') u'a \u0301a' >>> normalize('NFKC', u'a\xb4a') u'a \u0301a' >>> name(u'\xb4'), name(u'\u0301') ('ACUTE ACCENT', 'COMBINING ACUTE ACCENT') 

Я пытаюсь понять, правильно ли поведение для перевода u'\xb4' на u' \u0301' . Почему он сочетает в себе острый акцент с пространством? Почему это вообще переводит u \xb4 ?

В fileformat мы видим, что ACUTE ACCENT назывался SPACING ACUTE . Я думал, это означало, что курсор должен двигаться, а не ждать ввода следующего символа.

UPD: в случае, если кому-то интересно, вот список, если символы юникода, которые после нормализации NFKC имеют место в начале: http://pastebin.com/Z99r5AK9

3 Solutions collect form web for “Нормализация юникода на Python: правильно ли перевести u '\ xb4' на u '\ u0301'”

Символ акцента представляет собой комбинацию пространства и сочетающего акцентный характер, как указано в стандарте Unicode:

 >>> import unicodedata >>> unicodedata.decomposition(u'\xb4') '<compat> 0020 0301' 

Характер \u00B4 имеет несколько неоднозначную историю, но стандарт Unicode решил рассматривать его как пробел + акцент, хотя он часто использовался как просто диакритический знак, см. Это обсуждение .

Вы могли бы использовать \u02CA в качестве альтернативы; он не рассматривается как пробел и не имеет разложения. Вместо этого он квалифицируется как письмо, поэтому ваш пробег может отличаться.

Взгляните на документ Uniform Code Collation Algorithm . В частности, отметим, что

Нормализация совместимости (NFKC) сводит автономные акценты к сочетанию пространства + сочетание акцента.

В NFKD акцентированные символы хранятся «разделенным» образом: сначала символ, который должен быть акцентирован, а затем сочетающий акцент: u' \u0301'

В NFKC акцентированные символы хранятся в «комбинированном» виде: есть выделенный код кода Unicode: u'\xb4' , который является сокращением для u'\u00b4' .

Оба они представляют собой только один акцент, который можно рассматривать как акцент над пространственным характером.

  • Функция python list () меняет на (я думаю) utf-8
  • Как извлечь последовательности символов Unicode из исполняемого файла MZ?
  • В чем дело с Python 3.4, Unicode, разными языками и Windows?
  • Python String Cleanup + Manipulation (Акцентированные символы)
  • Преобразование Unicode в UTF-8 Python
  • Юникод, регулярные выражения и PyPy
  • Python Unicode object и C API (получение char * из объектов pyunicode)
  • Как сделать безопасное двоичное сравнение в Python?
  • Python - лучший язык программирования в мире.