Преобразование строки в байты в Python
В этом посте мы обсудим, как преобразовать строку в байты в Python (и наоборот).
В Python есть два разных способа преобразовать строку в байты:
1. Использование bytes() функция
Идея состоит в том, чтобы использовать конструктор bytes bytes(string, encoding) чтобы получить массив байтов из строки, используя указанную кодировку.
if __name__ == ‘__main__’ :
s = ‘Hello, World’
b = bytes ( s , ‘utf-8′ )
print ( b ) # b’Hello, World’
Чтобы сделать обратное, то есть преобразовать байты в строку, передайте байты конструктору строки с используемой кодировкой. Если кодировка не указана, используется текущая кодировка по умолчанию, используемая реализацией Unicode.
if __name__ == ‘__main__’ :
b = b ‘Hello, World’
s = str ( b , ‘utf-8’ )
print ( s ) # Hello, World
2. Использование encode() функция
Другим вариантом является использование str.encode функция для кодирования строки с использованием указанной кодировки или кодировки по умолчанию utf-8 .
if __name__ == ‘__main__’ :
s = ‘Hello, World’
b = s . encode ( ‘utf-8′ )
print ( b ) # b’Hello, World’
Чтобы получить строку, декодированную из заданных байтов, вы можете использовать bytes.decode функция, которая принимает кодировку или использует кодировку по умолчанию utf-8 когда кодировка не указана.
if __name__ == ‘__main__’ :
b = b ‘Hello, World’
s = b . decode ( ‘utf-8’ )
print ( s ) # Hello, World
Это все о преобразовании строки в байты в Python.
Также см:
Оценить этот пост
Средний рейтинг 5 /5. Подсчет голосов: 23
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Подписывайся
0 Комментарии
Встроенные отзывы
Просмотреть все комментарии
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации
- Все проблемы
- Практика DSA
- 100 самых популярных задач
- 50 лучших классических задач
- Лучшие алгоритмы
- Компилятор С/С++
- Компилятор Java
- Компилятор Python
- Компилятор JavaScript
- компилятор PHP
- Компилятор C#
- Свяжитесь с нами
- Политика конфиденциальности
- условия обслуживания
- Подпишитесь на новые публикации
Techie Delight © 2023 Все права защищены.
Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно
Как преобразовать переменную в байты
Вы хотите переменную в байты перевести? Или полученную строку присвоить к переменной?
25 сен 2021 в 8:54
Или всё-таки строку?
25 сен 2021 в 8:55
@Tehnorobot переменную в байты
25 сен 2021 в 9:05
@dontHacker1234 так нельзя делать, лучше используйте переменную в качестве носителя строки.
25 сен 2021 в 9:08
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Да много вариантов есть. В дополнение к предыдущим:
a=bytes('Строка байт', encoding = 'utf-8') b=a print (b) b'\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0 \xd0\xb1\xd0\xb0\xd0\xb9\xd1\x82'
a='Это будет строка байт'.encode('utf-8') b = bytearray(a) print (b) bytearray(b'\xd0\xad\xd1\x82\xd0\xbe \xd0\xb1\xd1\x83\xd0\xb4\xd0\xb5\xd1\x82 \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0 \xd0\xb1\xd0\xb0\xd0\xb9\xd1\x82')
Или даже так: именно «готовая» переменная — в байты:
t='Строка байт' a=bytes(t, encoding = 'utf-8') print (a)
Байты¶
Байтовые строки очень похожи на обычные строки, но с некоторыми отличиями.
Что такое байты? Байт — минимальная единица хранения и обработки цифровой информации. Последовательность байт представляет собой какую-либо информацию (текст, картинку, мелодию. ).
Создание байтовой строки¶
Создаём байтовую строку:
>>> b'bytes' b'bytes' >>> 'Байты'.encode('utf-8') b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b' >>> bytes('bytes', encoding = 'utf-8') b'bytes' >>> bytes([50, 100, 76, 72, 41]) b'2dLH)'
Функция bytes принимает список чисел от 0 до 255 и возвращает байты, получающиеся применением функции chr .
>>> chr(50) '2' >>> chr(100) 'd' >>> chr(76) 'L'
Что делать с байтами? Хотя байтовые строки поддерживают практически все строковые методы, с ними мало что нужно делать. Обычно их надо записать в файл / прочесть из файла и преобразовать во что-либо другое (конечно, если очень хочется, то можно и распечатать). Для преобразования в строку используется метод decode :
>>> b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'.decode('utf-8') 'Байты'
Bytearray¶
Bytearray в Python — массив байт. От типа bytes отличается только тем, что является изменяемым.
>>> b = bytearray(b'hello world!') >>> b bytearray(b'hello world!') >>> b[0] 104 >>> b[0] = b'h' Traceback (most recent call last): File "", line 1, in b[0] = b'h' TypeError: an integer is required >>> b[0] = 105 >>> b bytearray(b'iello world!') >>> for i in range(len(b)): . b[i] += i . >>> b bytearray(b'ifnos%>vzun,')
Конвертация между байтами и строками#
Избежать работы с байтами нельзя. Например, при работе с сетью или файловой системой, чаще всего, результат возвращается в байтах.
Соответственно, надо знать, как выполнять преобразование байтов в строку и наоборот. Для этого и нужна кодировка.
Кодировку можно представлять как ключ шифрования, который указывает:
- как «зашифровать» строку в байты (str -> bytes). Используется метод encode (похож на encrypt)
- как «расшифровать» байты в строку (bytes -> str). Используется метод decode (похож на decrypt)
Эта аналогия позволяет понять, что преобразования строка-байты и байты-строка должны использовать одинаковую кодировку.
encode, decode#
Для преобразования строки в байты используется метод encode:
In [1]: hi = 'привет' In [2]: hi.encode('utf-8') Out[2]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [3]: hi_bytes = hi.encode('utf-8')
Чтобы получить строку из байт, используется метод decode:
In [4]: hi_bytes Out[4]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [5]: hi_bytes.decode('utf-8') Out[5]: 'привет'
str.encode, bytes.decode#
Метод encode есть также в классе str (как и другие методы работы со строками):
In [6]: hi Out[6]: 'привет' In [7]: str.encode(hi, encoding='utf-8') Out[7]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
А метод decode есть у класса bytes (как и другие методы):
In [8]: hi_bytes Out[8]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [9]: bytes.decode(hi_bytes, encoding='utf-8') Out[9]: 'привет'
В этих методах кодировка может указываться как ключевой аргумент (примеры выше) или как позиционный:
In [10]: hi_bytes Out[10]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [11]: bytes.decode(hi_bytes, 'utf-8') Out[11]: 'привет'
Как работать с Юникодом и байтами#
Есть очень простое правило, придерживаясь которого, можно избежать, как минимум, части проблем. Оно называется «Юникод-сэндвич»:
- байты, которые программа считывает, надо как можно раньше преобразовать в Юникод (строку)
- внутри программы работать с Юникод
- Юникод надо преобразовать в байты как можно позже, перед передачей