'\U0001f92d' == '?'
- это True
. Это escape-код, но все тот же символ ... Два способа отображения / ввода. Первая - это repr()
строки, печатающая звонки str()
. Пример:
>>> s = '?'
>>> print(repr(s))
'\U0001f92d'
>>> print(str())
?
>>> s
'\U0001f92d'
>>> print(s)
?
Когда Python генерирует repr (), он использует представление escape-кода, если считает, что дисплей не может обработать символ. Содержимое строки остается тем же ... кодовая точка Unicode.
Это функция отладки. Например, это пробелы или табуляции? repr()
строки проясняет это, используя \t
в качестве кода перехода.
>>> s = 'a\tb'
>>> print(s)
a b
>>> s
'a\tb'
Относительно того, почему код перехода используется для одного смайлика, а не для другого, это зависит от версии Юникод поддерживается используемой версией Python.
Pyton 3.8 использует Юникод 9.0, и один из ваших смайликов не определен на этом уровне версии:
>>> import unicodedata as ud
>>> ud.unidata_version
'9.0.0'
>>> ud.name('?')
'GRINNING FACE WITH SMILING EYES'
>>> ud.name('?')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: no such name