Проблемы с отображением символов Unicode в Python (объединение символов, символов кана и т. Д.)

Я пытаюсь составить несколько программ для анализа текста на нескольких языках, включая латынь, древнегреческий и китайский. Среди них один из них предназначен для анализа слова на латыни и разложения его на составляющие его слоги, затем нахождения того слога с ударением и добавления острого ударения к гласной этого слога. В случае долгих гласных, таких как «ā», для получения «ā» необходимо использовать сочетание острого ударения «́». Но когда я помещаю значение Unicode для комбинированного акцента ('\ u0301') в строку после символа, к которому я хочу добавить его, он не объединяет символы, как должен, когда печатает строку, а вместо этого помещает их рядом друг к другу отдельно. Кроме того, когда я пытаюсь отобразить незападные символы Юникода, такие как японская хирагана, катакана или унифицированные иероглифы CJK, все, что я получаю, - это знак вопроса в поле, которое вы получаете, когда система не может правильно отобразить символ. У меня нет этих проблем с объединением символов или CJK Unified Ideographs в другом месте, поскольку они отлично работают, например, в Google Chrome или Microsoft Word. Я запускаю Python3 на 64-битном ноутбуке с Windows 10. Кроме того, как я могу справиться с любой из этих проблем, если они возникают с Sqlite3?


person Diogenes    schedule 16.10.2019    source источник


Ответы (2)


Вы можете нормализовать комбинирование акцентов к составной форме, например NFC:

>>> from unicodedata import normalize
>>> char = 'a'
>>> accent = '\u0301'
>>> normalize("NFC", char + accent)
'á'  # this is a length 1 string

Что касается ā́, я думаю, что самая короткая длина в Python - это длина 2 ('\u0101\u0301'), эмулятор терминала должен правильно комбинировать глифы для буквы и акценты при рендеринге.

Что касается проблемы, о которой вы упомянули о некорректном отображении японских символов (вопросительный знак в поле, которое вы получаете, когда система не может правильно отображать символ), это не вопрос программирования или кодирования, вам просто нужно установить соответствующие глифы и шрифты. В Linux я использую GNU Unifont, я не уверен, что использовать в Windows 10.

person wim    schedule 16.10.2019
comment
Вы не угадали, не виноват шрифт. Голосующие не подтвердили. - person daxim; 17.10.2019
comment
Замечание о шрифтах касалось того, почему пользователь видит символ вопросительного знака в поле, как упоминалось в вопросе. Отредактировано для уточнения. - person wim; 17.10.2019

Это не имеет ничего общего с программированием. Просто удалите сломанный эмулятор терминала и установите что-нибудь работающее, например ConEmu.

person daxim    schedule 17.10.2019
comment
Итак, встроенная командная строка на моем компьютере не будет правильно отображать символы, что бы я ни делал? То же самое относится и к текстовому редактору, который я использую (Atom)? - person Diogenes; 20.10.2019