Перевод строки байтов в байты в Python: методы и примеры

0
15

Краткая памятка по работе с байтами и строками в Python

  1. В Python 3 всегда используйте.encode() для преобразования строки в байты.
  2. В Python 3 всегда используйте.decode() для преобразования байтов в строку.
  3. Всегда явно указывайте кодировку (например, ‘utf-8’) при encode/decode.
  4. В Python 2 помните, что str — это байты, а unicode — строки.
  5. Для преобразования unicode в байты в Python 2 используйте.encode().
  6. Для преобразования байтов в unicode в Python 2 используйте.decode().
  7. Избегайте смешивания байтов и строк в одном выражении без явного преобразования.
  8. При работе с файлами всегда открывайте их в правильном режиме (‘rb’ для байтов, ‘r’ для текста).
  9. Используйте библиотеку codecs для работы с разными кодировками.
  10. Проверяйте тип данных с помощью type() или isinstance(), чтобы избежать ошибок.
  11. При сомнениях в кодировке данных используйте chardet для ее определения.

Пример 1:

Курс по - изображение номер один
Курс по — изображение номер один

В этом примере для перевода данных использовался метод encode(). Это наиболее часто используемый и рекомендуемый способ преобразования строк Python в байты. Одна из основных причин — его легче читать. Синтаксис метода кодирования следующий:

Строка, которую вы хотите преобразовать, называется строкой. Используемый вами метод кодирования называется «кодирование». Строка «Error» показывает сообщение об ошибке. UTF-8 стал стандартом со времен Python 3.

my_str = «sample code for conversion» my_str_encoded = my_str.encode(encoding = ‘UTF-8’) print(my_str_encoded) for bytes in my_str_encoded: print(bytes,end =»)

В качестве примера мы использовали строку my_str = “Sample code for conversion”. Мы использовали кодировку для преобразования после инициализации строки, а затем распечатали вывод строки. После этого мы распечатали отдельные байты следующим образом:

Best way to convert string to bytes in - изображение номер два
Best way to convert string to bytes in — изображение номер два

Преобразование байтов в строку в Python 3

Конвертация байт в шестнадцатеричную строку в - изображение номер три
Конвертация байт в шестнадцатеричную строку в — изображение номер три

Начиная с Python 3, пришлось отказаться от старого способа работы с ASCII, и Python стал полностью Unicode.

ЧИТАТЬ ТАКЖЕ:  Разделение числа на части в Python: запятая перед «как», союз и значение слова

Это означает, что мы потеряли явный тип Unicode: u»string» — каждая строка — это u»string»!

Чтобы отличить эти строки от старых добрых строк байтов, мы познакомились с новым спецификатором для них — b»string».

Это было добавлено в Python 2.6, но не служило реальной цели, кроме подготовки к Python 3, поскольку все строки были байтовыми строками в 2.6.

Строки байтов в Python 3 официально называются bytes, неизменной последовательностью целых чисел в диапазоне 0 <= x <256. Другой bytes — подобный объект, добавленный в 2.6, bytearray — похож на bytes, но изменяемый.

Преобразование байтов в строку в Python 2

5 методов, как преобразовать - изображение номер четыре
5 методов, как преобразовать — изображение номер четыре

В Python 2 набор байтов и строка — это практически одно и то же: строки — это объекты, состоящие из однобайтовых символов, что означает, что каждый символ может хранить 256 значений. Вот почему их иногда называют строками байтов.

Это замечательно при работе с байтовыми данными — мы просто загружаем их в переменную и готовы к печати:

Преобразование байтов в Unicode (Python 2)

Количественный подход к измерению информации - изображение номер пять
Количественный подход к измерению информации — изображение номер пять

Здесь нам придется использовать тип Python 2 Unicode, который предполагается и автоматически используется в Python 3. В нем строки хранятся как последовательность кодовых точек, а не байтов.

Помните о своей кодировке

Преобразование шестнадцатеричных строк в байты в - изображение номер шесть
Преобразование шестнадцатеричных строк в байты в — изображение номер шесть

Здесь следует предостеречь — байты могут по-разному интерпретироваться в разных кодировках. Из- за того, что из коробки доступно около 80 различных кодировок, может быть нелегко узнать, есть ли у вас правильная!

s = ‘\xf8\xe7’ # This one will let us know we used the wrong encoding >>> (‘UTF-8’) UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xf8 in position 0: invalid start byte # These two overlaps and this is a valid string in both >>> (‘latin1’) øç (‘iso8859_5’) јч

Пример 2:

Программируем на - изображение номер семь
Программируем на — изображение номер семь

Чтобы преобразовать строку в байты, мы можем использовать встроенный в Python класс Bytes: просто укажите строку в качестве первого аргумента функции Object() { [native code] } класса Bytes, а затем укажите кодировку. Изначально у нас есть строка с названием «my_str». Мы преобразовали эту конкретную строку в байты.

ЧИТАТЬ ТАКЖЕ:  Что нужно знать для анализа данных на Python: библиотеки и инструменты

my_str = «welcome to Python» str_one = bytes(my_str, ‘utf-8’) str_two = bytes(my_str, ‘ascii’) print(str_one,’\n’) for byte in str_one: print(byte, end=») print(‘\n’) for byte in str_two: print(byte,end=»)

Python - изображение номер восемь
Python — изображение номер восемь

Пример 3:

В нашем третьем примере мы снова используем метод encode() для преобразования строк в байты. Это удобный способ конвертировать строки в байты.

Мы рассматриваем my_str=«Learn about programming» как источник, который нужно преобразовать в байты в приведенном выше коде. На следующем шаге мы превратили строку в байты с помощью метода encode(). До и после преобразования функция type() используется для проверки типа объекта. Здесь используется enc = utf-8.

Python: bytes() function - w3resource - изображение номер девять
Python: bytes() function — w3resource — изображение номер девять

Часто задаваемые вопросы о переводе строки байтов в байты в Python

Вопрос: В чем разница между байтами и строкой в Python?
Ответ: Байты — это неизменяемая последовательность байтов (чисел от 0 до 255), а строка — это последовательность символов Unicode.

Вопрос: Как преобразовать строку в байты в Python 3?
Ответ: Используйте метод.encode() для строки, указав кодировку, например ‘utf-8’.

Вопрос: Как преобразовать байты в строку в Python 3?
Ответ: Используйте метод.decode() для объекта bytes, указав кодировку.

Вопрос: Что произойдет, если не указать кодировку при декодировании?
Ответ: Python использует кодировку по умолчанию (обычно UTF-8), что может привести к ошибке, если байты закодированы иначе.

Вопрос: Как преобразовать строку в байты в Python 2?
Ответ: Используйте функцию bytes() или метод.encode() для строки.

Вопрос: В чем разница между str и bytes в Python 2?
Ответ: В Python 2 str — это последовательность байтов, а unicode — последовательность символов. bytes — это псевдоним для str.

Вопрос: Как преобразовать байты в строку Unicode в Python 2?
Ответ: Используйте метод.decode() для строки байтов.

Вопрос: Что такое кодировка и почему она важна?
Ответ: Кодировка — это правило преобразования символов в байты. Неправильная кодировка приводит к искажению данных (кракозябрам).

Вопрос: Какая кодировка самая распространенная?
Ответ: UTF-8 — самая популярная и универсальная кодировка для веба и большинства приложений.

Вопрос: Что делать, если при декодировании возникает ошибка UnicodeDecodeError?
Ответ: Убедитесь, что вы используете правильную кодировку, или используйте обработку ошибок, например errors=’ignore’ или errors=’replace’.