Каждый элемент списка кодировать в Unicode
Хочу каждый элемент списка перевести в символы Unicode, но ничего не выходит. Подскажите, в чём проблема?
fio1 = "Иванов Иван Иванович"
fio1 = fio1.replace(' ', '')
list_fio1 = list(fio1)
list_fio2 = []
for x in list_fio1:
x.encode()
list_fio2.append(x)
print(list_fio2)
Мне выводит:
['И', 'в', 'а', 'н', 'о', 'в', 'И', 'в', 'а', 'н', 'И', 'в', 'а', 'н', 'о', 'в', 'и', 'ч']
Ответы (2 шт):
.encode() не изменяет строку, а отдает изменённую.
for x in list_fio1:
list_fio2.append(x.encode())
Однако лучше использовать генератор списка.
list_fio2 = [x.encode() for x in list_fio1]
Для получения unicode кода символа нужно использовать функцию ord():
fio1 = "Иванов Иван Иванович"
fio1 = fio1.replace(' ', '')
list_fio = []
for x in fio1:
list_fio.append(ord(x))
print(list_fio)
Отличие от метода encode - encode для каждого символа вернет один или несколько байт (тип bytes), представляющих данный символ в указанной кодировке. Если кодировка не указана, то будет использована кодировка utf-8 (документация). Из utf-8 напрямую unicode код символа не получить, там относительно сложный алгоритм преобразования.
Можно конечно кодировать в байты в кодировке utf-16 (или utf-32 для надежности, чтобы поддерживались символы с кодом больше 0xffff), потом из байт декодировать в число, но это будет только лишним усложнением. Для сравнения, вот такая конструкция:
int.from_bytes('я'.encode('utf-32-le'), 'little')
даст тот же результат, что просто ord('я').