Нормализация юникода на 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 bs4 корректно работать с XML?
  • Python: Как заставить StringIO.writelines принимать строку Unicode?
  • unicode () vs. str.decode () для закодированной байтовой строки utf8 (python 2.x)
  • django: gettext и принуждение к unicode
  • Python 3.4 вызывает UnicodeEncodeError на сервере Apache2 (Mac), но отлично работает в командной строке
  • Python JSON загружает / откачивает разрыв Unicode?
  • предупреждение python dateutil unicode
  • Имена файлов Python os.stat и unicode
  • В Python, как мне преобразовать список ints и строк в Unicode?
  • Каким образом можно использовать метаданные Unicode в файле setup.py?
  • Только первый символ строк unicode, записываемых в csv
  •  
    Interesting Posts for Van-Lav

    Conda не может активировать среду

    INFO menuinst_win32: __ init __ (182): Меню: имя: 'Anaconda $ {PY_VER} $ {PLATFORM}'

    Как связать задачу сельдерея, которая возвращает список в группу?

    Проблемы с форматированием валюты с помощью Python (Django)

    Что такое эквивалент Matlab 'fscanf' в Python?

    Python перечисляет только обратный индекс

    'Объект модуля не имеет атрибута' get 'Python error Requests?

    Написание правил грамматики для контекстно-зависимых элементов с использованием Pyparsing

    Создайте fortran-расширение для Windows с gfortran и MSVC

    Эффективность Python: списки против кортежей

    NumPy – установка значений в структурированном массиве на основе других значений в структурированном массиве

    Аппаратное прерывание для синхронного сбора данных

    Колба и пушки, несколько модулей: круговой импорт – не все маршруты доступны

    Python / Pandas: удалять строки из фрейма данных в строке из списка

    Многопроцессный демона, не заканчивающийся на родительском выходе

    Python - лучший язык программирования в мире.