• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

393
Vistas
¿Por qué base64.b64encode() devuelve un objeto de bytes?

El propósito de base64.b64encode() es convertir datos binarios en "texto" seguro para ASCII. Sin embargo, el método devuelve un objeto de tipo bytes:

 >>> import base64 >>> base64.b64encode(b'abc') b'YWJj'

Es fácil simplemente tomar esa salida y decode() , pero mi pregunta es: ¿cuál es el significado de base64.b64encode() devuelva bytes en lugar de una str ?

almost 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El propósito de la función base64.b64encode() es convertir datos binarios en "texto" seguro para ASCII

Python no está de acuerdo con eso: base64 se ha clasificado intencionalmente como una transformación binaria .

Fue una decisión de diseño en Python 3 forzar la separación de bytes y texto y prohibir las transformaciones implícitas. Python ahora es tan estricto con esto que bytes.encode ni siquiera existe, por lo que b'abc'.encode('base64') generaría un AttributeError .

La opinión que toma el lenguaje es que un objeto de cadena de bytes ya está codificado. Un códec que codifica bytes en texto no encaja en este paradigma, porque cuando desea pasar del dominio de bytes al dominio de texto, es una decodificación . Tenga en cuenta que la codificación rot13 también se eliminó de la lista de codificaciones estándar por la misma razón: no encajaba correctamente en el paradigma de Python 3.

También puede haber un argumento de rendimiento para hacer: suponga que Python manejó automáticamente la decodificación de la salida base64, que es una representación binaria codificada en ASCII producida por el código C del módulo binascii , en un objeto de Python en el dominio de texto. Si realmente quisiera los bytes, solo tendría que deshacer la decodificación codificando en ASCII nuevamente. Sería un viaje de ida y vuelta inútil, una doble negación innecesaria. Es mejor 'optar por participar' en el paso de decodificación a texto.

almost 3 years ago · Santiago Trujillo Denunciar

0

Es imposible que b64encode() sepa lo que quiere hacer con su salida.

Si bien en muchos casos es posible que desee tratar el valor codificado como texto, en muchos otros, por ejemplo, al enviarlo a través de una red, es posible que desee tratarlo como bytes.

Dado que b64encode() no puede saberlo, se niega a adivinar. Y dado que la entrada es bytes , la salida sigue siendo del mismo tipo, en lugar de forzarse implícitamente a str .

Como señala, decodificar la salida a str es sencillo:

 base64.b64encode(b'abc').decode('ascii')

... además de ser explícito sobre el resultado.

Aparte, vale la pena señalar que aunque base64.b64decode() (nota: de code, no en code) ha aceptado str desde la versión 3.3, el cambio fue algo controvertido .

almost 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda