Расшифровка utf-8 в python - PullRequest
0 голосов
/ 09 мая 2020

У меня есть такое выражение, которое производит список байтов представления utf-8.

list(chr(number).encode("utf-8"))

Но как это сделать в обратном порядке?

Скажем, у меня есть 2 bytes [292, 200] в виде списка, как я могу декодировать их в символ?

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Вы можете вызвать bytes в списке целых чисел в диапазоне 0..255.

Таким образом, ваш пример выглядит наоборот:

>>> bytes([195, 136]).decode('utf8')
'È'

Если вам нужен код, оберните его в ord():

>>> ord(bytes([195, 136]).decode('utf8'))
200

Примечание: последний шаг работает, только если последовательность байтов соответствует одному символу Unicode (кодовая точка).

1 голос
/ 09 мая 2020
  1. Вы должны помнить, что char хранит только 8 бит: от -128 до 127. Так что, если 'number' больше, чем пределы char, это не сработает.

    number = 127
    print(f"number: {number}")
    li = list(chr(number).encode("utf-8"))
    print(f"List of byte: {li}")
    dec = int.from_bytes(li, byteorder='big')
    print(f"Type dec: {type(dec)}")
    print(f"Value dec: {dec}")
    

    enter image description here

    number = 128
    print(f"number: {number}")
    li = list(chr(number).encode("utf-8"))
    print(f"List of byte: {li}")
    dec = int.from_bytes(li, byteorder='big')
    print(f"Type dec: {type(dec)}")
    print(f"Value dec: {dec}")
    

    enter image description here

    Взгляните на python документация для преобразования значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...