python, использующий unicode, объединяющий overline

#python #unicode #combining-marks

#питон #юникод #объединение-метки

Вопрос:

Я создаю документацию в формате PDF по инженерным расчетам с использованием reportlab. Я придерживаюсь обозначения, используемого в реализуемом коде. При этом используются в основном латинские и греческие буквы, подстрочные и надстрочные индексы. Для этого я реализовал очень простой метод, основанный на замене определенных строк в тексте символами Юникода перед созданием PDF-файла. Это можно было бы сделать иначе, но это работает. Однако одна проблема ускользает от меня: создание символов с использованием комбинирования символов, в частности символов с полосами над ними, скажем, латинская буква «d» с полосой.

 >>> print('b' u'u0304')
 

выдает в консоли python строку рядом с «b» (обратите внимание, что в редакторе stackoverflow результат соответствует ожидаемому :-)). Однако то же самое с акцентом работает в консоли:

 >>> print('fue'  u'u0301')
 

Есть идеи, в чем моя ошибка?

Комментарии:

1. На моей консоли отображается b с полосой над ним. Я использую консоль utf8 в Linux (подглядываю sys.stdout.encoding ). Вы используете Windows? Это может быть связано с кодовой страницей.

2. Да, это Win8. Чтобы сделать вещи более интересными: print(‘e’ u’ u0304′) работает так, как ожидалось.

3. Я думаю, это вопрос о том, имеет ли ваша кодовая страница кодовую точку. Вы можете загрузить модуль, который заставит python использовать расширенную версию консольного API, и это может помочь. Я думаю, что это решает проблему python.org/dev/peps/pep-0528 но у вас нет под рукой Windows, чтобы проверить это.

4. Мне кажется правдоподобным — спасибо за усилия! Я думаю, что я просто откажусь от использования кодовой нотации и найду подходящую замену для этой панели. Проблема будет решена в любом случае через несколько лет 🙂

5. Почему вы используете a для объединения этих строк? Вы можете написать просто: 'fueu0301' o 'bu0304'