При попытке конвертировать значения в юникоде вы можете столкнуться с множеством проблем.Таким образом, использование unichr
также не всегда возможно, например:
>>> n = int('0001f600', 16)
>>> unichr(n)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unichr() arg not in range(0x10000) (narrow Python build)
Обратите внимание на сообщение narrow Python build
в сообщении об ошибке, это означает, что Python был построен без поддержки широких символов Юникода, но даже узкий Python может получитьвокруг этого ограничения (без необходимости перекомпиляции с флагом --enable-unicode=ucs4
):
>>> n = int('0001f600', 16)
>>> s = '\\U{:0>8X}'.format(n)
>>> s
'\\U0001F600'
>>> binary = s.decode('unicode-escape')
>>> print(binary)
?