Вопрос-Ответ

Convert bytes to a string in Python 3

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

Я преобразовал стандартный вывод внешней программы в bytes объект:

>>> from subprocess import *
>>> stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
>>> stdout
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'

Я хочу преобразовать это в обычную строку Python, чтобы я мог распечатать ее следующим образом:

>>> print(stdout)
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2

Как мне преобразовать bytes объект в str с помощью Python 3?


Смотрите Лучший способ преобразования строки в байты в Python 3? для получения информации об обратном способе.

Переведено автоматически
Ответ 1

Декодируйте bytes объект для получения строки:

>>> b"abcde".decode("utf-8")
'abcde'

В приведенном выше примере предполагается, что bytes объект находится в UTF-8, потому что это обычная кодировка. Однако вы должны использовать кодировку, в которой на самом деле находятся ваши данные!

Ответ 2

Расшифруйте строку байтов и преобразуйте ее в символьную строку (Unicode).


Python 3:

encoding = 'utf-8'
b'hello'.decode(encoding)

или

str(b'hello', encoding)

Python 2:

encoding = 'utf-8'
'hello'.decode(encoding)

или

unicode('hello', encoding)
Ответ 3

Это объединяет список байтов в строку:

>>> bytes_data = [112, 52, 52]
>>> "".join(map(chr, bytes_data))
'p44'
Ответ 4

В Python 3 по умолчанию используется кодировка "utf-8", поэтому вы можете напрямую использовать:

b'hello'.decode()

что эквивалентно

b'hello'.decode(encoding="utf-8")

С другой стороны, в Python 2 по умолчанию используется кодировка строки по умолчанию. Таким образом, вы должны использовать:

b'hello'.decode(encoding)

где encoding - это нужная вам кодировка.

Примечание: поддержка аргументов ключевых слов была добавлена в Python 2.7.

python string python-3.x