Способ отображения смайликов на IDLE / Terminal? UnicodeEncodeError - Символ не-BMP не поддерживается в Tk - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь напечатать этот пример кода

print ("Hello \U0001F914")

Теперь, если я запускаю этот код на терминале MacOS, он печатается с мыслями emoji, а если я запускаю его на терминале Linux, он выполняетто же самое с альтернативными смайликами. Когда я пытаюсь запустить это на IDLE, я сталкиваюсь с этой ошибкой:

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    print ("Hello \U0001F914")
UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 6-6: Non-BMP character not supported in Tk

Есть ли способ позволить ему печатать на интерпретаторах, которые могут обрабатывать эмодзи, и на интерпретаторах, которые не могут отображать смайлики, просто замените его начто-то или не показывать вообще без сбоев?

Сейчас я думаю о том, чтобы использовать библиотеку ОС и, возможно, получить информацию о том, что запускает пользователь, а затем соответственно изменить выполненную кодировку.

Если бы кто-нибудь смог найти решение, это было бы очень признательно! Спасибо

1 Ответ

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

Обычно это невозможно - и для того, чтобы это было действительно возможно, потребовалось бы слишком необычное умение.

Дело в том, что TCL, технологический стек, поддерживающий tkinter, не выполняет Unicode за пределами BMP, то естьлюбой символ с odepoint больше 0xffff.

Единственный обходной путь для этого - переписать всю часть TCL для его поддержки или добавить слой кода, который будет перехватывать все строки, передаваемые некоторым изметоды обработки текста, и замените эти символы предварительно встроенным встроенным изображением (и правильное размещение его в текстовом потоке потребует некоторой работы - я даже не уверен, возможно ли иметь встроенное изображение в tknter).

Итак, если вам нужно использовать эти символы в графическом интерфейсе, созданном с помощью Python, вы можете использовать Qt или GTK для графического интерфейса;

...