#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'
…