Проблемы с отображением символов Unicode в Python (объединение символов, символов кана и т. Д.) - PullRequest
2 голосов
/ 16 октября 2019

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

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вы можете нормализовать объединение акцентов в составленной форме, например, 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.

0 голосов
/ 17 октября 2019

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

...