Por exemplo, eu tenho uma string como esta (valor de retorno de subprocess.check_output
):
>>> b'a string'
b'a string'
O que quer que eu tenha feito, é sempre impresso com o irritante b'
antes da string:
>>> print(b'a string')
b'a string'
>>> print(str(b'a string'))
b'a string'
Alguém tem alguma idéia sobre como usá-lo como uma string normal ou convertê-lo em uma string normal?
python
string
python-3.x
binary
Hanfei Sun
fonte
fonte
Respostas:
Decodifique.
Para obter bytes da string, codifique-a.
fonte
ascii
porque a string fornecida foi feita com letras ascii. Você não precisa especificar codificação se a codificação éutf-8
(padrão em Python 3.x segundostr.encode
,bytes.decode
doc-string)import locale
e entãoos_encoding = locale.getpreferredencoding()
. Dessa forma, podemos decodificar usandomy_b_string.decode(os_encoding)
sys.getfilesystemencoding()
,sys.stdin.encoding
,sys.stdout.encoding
. IMHO, o uso da detecção automática de codificação pode resolver o problema porque o subprograma (o OP está usando o subprocesso) pode ser escrito de outra maneira para determinar a codificação (ou mesmo o código fixo). Obrigado pelo feedback, de qualquer maneira.sys.getfilesystemencoding()
retorna o nome da codificação usada para converter entre nomes de arquivos Unicode e bytes e é fortemente dependente do sistema operacional que você está usando. AFAIK, esta função é usada para converter na representação preferida do sistema. Isso significa que ele não vai inferir a codificação utilizada pelo console que pode ser obtida usando o já mencionadolocale.getpreferredencoding()
funçãoSe a resposta da falsetru não funcionou, você também pode tentar:
fonte
Por favor, consulte o oficial
encode()
e adecode()
documentação dacodecs
biblioteca.utf-8
é a codificação padrão para as funções, mas há várias codificações padrão no Python 3, comolatin_1
ouutf_32
.fonte