string - example - ¿Cómo convierto una variable de cadena de bytes de Python 3 en una cadena normal?
decode bytearray python (4)
¿Cómo filtrar (omitir) caracteres no UTF8 de la matriz?
Para abordar este comentario en la publicación de @ uname01 y el OP, ignore los errores:
Código
>>> b''/x80abc''.decode("utf-8", errors="ignore")
''abc''
Detalles
De los
docs
, aquí hay más ejemplos que usan el mismo parámetro de
errors
:
>>> b''/x80abc''.decode("utf-8", "replace")
''/ufffdabc''
>>> b''/x80abc''.decode("utf-8", "backslashreplace")
''//x80abc''
>>> b''/x80abc''.decode("utf-8", "strict")
Traceback (most recent call last):
...
UnicodeDecodeError: ''utf-8'' codec can''t decode byte 0x80 in position 0:
invalid start byte
El argumento de errores especifica la respuesta cuando la cadena de entrada no se puede convertir de acuerdo con las reglas de codificación. Los valores legales para este argumento son
''strict''
(generar una excepciónUnicodeDecodeError
),''replace''
(usarU+FFFD
,REPLACEMENT CHARACTER
) o''ignore''
(simplemente dejar el carácter fuera del resultado de Unicode).
He leído en un archivo adjunto de correo electrónico XML con
bytes_string=part.get_payload(decode=False)
La carga útil viene como una cadena de bytes, como sugiere mi nombre de variable.
Estoy tratando de usar el enfoque recomendado de Python 3 para convertir esta cadena en una cadena utilizable que pueda manipular.
El ejemplo muestra:
str(b''abc'',''utf-8'')
¿Cómo puedo aplicar el argumento de palabra clave
b
(bytes) a mi variable
bytes_string
y usar el enfoque recomendado?
La forma en que lo intenté no funciona:
str(bbytes_string, ''utf-8'')
Llame a
decode()
en una instancia de
bytes
para obtener el texto que codifica.
str = bytes.decode()
Lo tenías casi justo en la última línea. Usted quiere
str(bytes_string, ''utf-8'')
porque el tipo de
bytes_string
es
bytes
, lo mismo que el tipo de
b''abc''
.
ACTUALIZADO:
NO TENER NINGUNA
b
citas al principio y al final
Como su código puede tener caracteres
irreconocibles
para
''utf-8''
codificación
''utf-8''
, es mejor usar solo str sin ningún parámetro adicional:
bad_bytes = b''/x02-/xdfI#)''
text = str( bad_bytes )[2:-1]
si agrega
''utf-8''
parámetro
''utf-8''
, a estos bytes específicos, debería recibir un error.
Como dice el estándar PYTHON 3, el
text
estaría en utf-8 ahora sin ninguna preocupación.