Por ejemplo, tengo una cadena como esta (valor de retorno de subprocess.check_output
):
>>> b'a string'
b'a string'
Lo que sea que le hice, siempre se imprime con el molesto b'
antes de la cadena:
>>> print(b'a string')
b'a string'
>>> print(str(b'a string'))
b'a string'
¿Alguien tiene alguna idea sobre cómo usarlo como una cadena normal o convertirlo en una cadena normal?
python
string
python-3.x
binary
Hanfei Sun
fuente
fuente
Respuestas:
Descifrarlo.
Para obtener bytes de la cadena, codifíquelo.
fuente
ascii
porque la cadena dada estaba hecha con letras ascii. No necesita especificar la codificación si la codificación esutf-8
(predeterminada en Python 3.x segúnstr.encode
,bytes.decode
doc-string)import locale
y luegoos_encoding = locale.getpreferredencoding()
. De esta manera, podemos decodificar usandomy_b_string.decode(os_encoding)
sys.getfilesystemencoding()
,sys.stdin.encoding
,sys.stdout.encoding
. En mi humilde opinión, el uso de la detección automática de codificación podría resolver el problema porque el subprograma (OP está utilizando el subproceso) podría escribirse de otra manera para determinar la codificación (o incluso codificado). Gracias por sus comentarios, de todos modos.sys.getfilesystemencoding()
devuelve el nombre de la codificación utilizada para convertir entre nombres de archivo Unicode y nombres de archivo de bytes y depende en gran medida del sistema operativo que esté utilizando. AFAIK, esta función se utiliza para convertir a la representación preferida del sistema. Eso significa que no inferirá la codificación utilizada por la consola que se puede obtener utilizando lalocale.getpreferredencoding()
función mencionada anteriormenteSi la respuesta de falsetru no funcionó, también puedes probar:
fuente
Por favor, consulte oficial
encode()
ydecode()
documentación de lacodecs
biblioteca.utf-8
es la codificación predeterminada para las funciones, pero hay varias codificaciones estándar en Python 3, comolatin_1
outf_32
.fuente