Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

554
Visualizações
¿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 ?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

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.

over 4 years ago · Santiago Trujillo Relatório

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 .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda