Возможно напечатать шестнадцатеричный код смайлика с шаблоном u'\uXXX'
в Python, например,
>>> print(u'\u231B')
⌛
Однако, если у меня есть список шестнадцатеричного кода, например 231B
, просто "добавив" "строка не будет работать:
>>> print(u'\u' + ' 231B')
File "<stdin>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape
Сбой chr()
тоже:
>>> chr('231B')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: an integer is required (got type str)
Моя первая часть вопроса с учетом шестнадцатеричного кода, например 231A
Как я могу получить str
тип эмодзи?
Моя цель - получить список смайликов из https://unicode.org/Public/emoji/13.0/emoji-sequences.txt и прочитать шестнадцатеричный код в первом столбце ,
Есть случаи, когда он колеблется от 231A..231B
, вторая часть моего вопроса , учитывая диапазон с шестнадцатеричным кодом, как мне перебрать диапазон, чтобы получить emoji str
, например, 2648..2653
, можно сделать range(2648, 2653+1)
, но если в гекса есть символ, например, 1F232..1F236
, использование range()
невозможно.
Спасибо @amadan за решения !!
TL; DR
Чтобы получить список смайликов из https://unicode.org/Public/emoji/13.0/emoji-sequences.txt в файл.
import requests
response = requests.get('https://unicode.org/Public/emoji/13.0/emoji-sequences.txt')
with open('emoji.txt', 'w') as fout:
for line in response.content.decode('utf8').split('\n'):
if line.strip() and not line.startswith('#'):
hexa = line.split(';')[0]
hexa = hexa.split('..')
if len(hexa) == 1:
ch = ''.join([chr(int(h, 16)) for h in hexa[0].strip().split(' ')])
print(ch, end='\n', file=fout)
else:
start, end = hexa
for ch in range(int(start, 16), int(end, 16)+1):
#ch = ''.join([chr(int(h, 16)) for h in ch.split(' ')])
print(chr(ch), end='\n', file=fout)