Например, у меня есть такая строка (возвращаемое значение subprocess.check_output
):
>>> b'a string'
b'a string'
Что бы я ни делал с этим, оно всегда печатается с раздражающей b'
строкой:
>>> print(b'a string')
b'a string'
>>> print(str(b'a string'))
b'a string'
У кого-нибудь есть идеи о том, как использовать его как нормальную строку или преобразовать в нормальную строку?
python
string
python-3.x
binary
Hanfei Sun
источник
источник
Ответы:
Расшифруйте это.
Чтобы получить байты из строки, закодируйте ее.
источник
ascii
потому что данная строка была сделана из букв ascii. Вам не нужно указывать кодировку , если кодировкаutf-8
( по умолчанию в Python 3.x в соответствииstr.encode
,bytes.decode
док-строка)import locale
потомos_encoding = locale.getpreferredencoding()
. Таким образом, мы можем декодировать, используяmy_b_string.decode(os_encoding)
sys.getfilesystemencoding()
,sys.stdin.encoding
,sys.stdout.encoding
. ИМХО, использование этого автоматического обнаружения кодирования может решить проблему, потому что подпрограмма (OP использует подпроцесс) может быть написана другим способом определения кодировки (или даже жестко закодирована). В любом случае, спасибо за отзыв.sys.getfilesystemencoding()
возвращает имя кодировки, используемой для преобразования между именами файлов Unicode и именами байтов, и сильно зависит от используемой операционной системы. AFAIK, эта функция используется для преобразования в предпочтительное представление системы. Это означает, что он не выведет кодификацию, используемую консолью, которая может быть получена с использованием вышеупомянутойlocale.getpreferredencoding()
функцииЕсли ответ от falsetru не сработал, вы также можете попробовать:
источник
Пожалуйста, смотрите официальный
encode()
иdecode()
документацию изcodecs
библиотеки.utf-8
является кодировкой по умолчанию для функций, но в Python 3 есть несколько стандартных кодировок , напримерlatin_1
илиutf_32
.источник