Байты - перевод из строки
📁 python
data = ""Hello"".encode(""utf-8"") # перевод в байтыне могу разобраться в байтах... как бы я не старался, Python мне выдает b'Hello'... как мне получить исходные байты этой строки?
Если попробовать с кириллицей, то все получается:
data = ""Привет"".encode(""utf-8"") # b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'или я не имею представления о байтах? объясните пожалуйста
Как b'Hello' так и b'\xd0\x9f\xd1\x80...' принадлежат к одному типу bytes.
b'Hello' == b'\x48\x65\x6c\x6c\x6f'. Байты, которые соответствуют печатаемым ascii символам (0x20..0x7e), по умолчанию показаны как эти символы в текстовом представлении repr(data) -- синтаксис, используемый для bytes-конcтант в исходном коде Питона (eval(repr(data)) == data).
Использование символов для некоторых байтов вместо шестнадцатеричных кодов может вводить в заблуждение (как в этом случае). Легко :
>>> b'Hello'.hex()'48656c6c6f'Мотивация по использованию b'Hello' вместо b'\x48\x65\x6c\x6c\x6f' могла быть связана с тем, что многие популярные протоколы такие как HTTP свободно смешивают текст (закодированный в ascii-совместимой кодировке) и двоичные данные. Поэтому использование символов вместо hex-кодов может помочь при отладке.
Недостаток использования b'Hello' вместо b'\x48\x65\x6c\x6c\x6f' состоит в том что люди смешивают понятия текста (Юникодные строки) и двоичных данных (байтов), что ведёт к путанице и в итоге . Что было особенно остро на Питоне 2, где str = bytes. See .
Без явного указания кодировки, последовательность байтов (bytes объект) является просто набором чисел. Последовательность байтов становится текстом только, если байты декодированы, используя подходящую кодировку:
unicode_text = bytestring.decode(character_encoding) Войдите чтобы оставить ответ