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