Introdução
Neste artigo, veremos como converter Bytes em Cordas em Python. No final deste artigo, terá uma ideia clara do que são estes tipos e como lidar eficazmente com os dados utilizando-os.
Dependente da versão de Python que estiver a utilizar, esta tarefa será diferente. Embora Python 2 tenha atingido o seu fim de vida, muitos projectos ainda o utilizam, por isso vamos incluir tanto a aproximação de Python 2 como Python 3.
Converta Bytes a String em Python 3
Desde Python 3, a velha forma ASCII de fazer as coisas tinha de desaparecer, e Python tornou-se completamente Unicode.
 Isto significa que perdemos o tipo unicode explícito:  – cada string é um u"string"!
 Para diferenciar estas cordas dos bons velhos bytestrings, somos introduzidos a um novo especificador para eles – o b"string".
Este foi adicionado em Python 2.6, mas não serviu nenhum propósito real a não ser o de se preparar para Python 3, pois todas as cordas foram bytestrings em 2.6.
Bytestrings em Python 3 são oficialmente chamados bytes, uma sequência imutável de inteiros no intervalo 0 <= x < 256. Outro bytescomo o objecto adicionado em 2.6 é o bytearray – semelhante a bytes, mas mutável.
Converta Bytes para String com descodificação()
Vejamos como podemos converter bytes para String, usando o método incorporado decode() para a classe bytes:
 passando o formato de codificação, descodificamos o objecto bytes numa corda e imprimimo-lo.
Converter Bytes para String com codecs
Alternativamente, podemos usar o módulo incorporado codecs para este fim também:
>>> import codecs>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'>>> codecs.decode(b, 'UTF-8')"Let's grab a 🍕!"Não é realmente necessário passar no parâmetro de codificação, no entanto, aconselha-se a passá-lo para dentro:
>>> codecs.decode(b)"Let's grab a 🍕!"Converta Bytes para String com str()
Finalmente, pode usar a função str(), que aceita vários valores e os converte em strings:
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'>>> str(b, 'UTF-8')"Let's grab a 🍕!"Cutifique-se de fornecer o argumento de codificação a str() embora, caso contrário poderá obter alguns resultados inesperados:
 Isto leva-nos mais uma vez às codificações. Se especificar a codificação errada, o melhor caso é o seu programa falhar porque não consegue descodificar os dados. Por exemplo, se tentássemos usar a função str() com UTF-16, seríamos saudados com:
>>> str(b, 'UTF-16')'敌❴\u2073牧扡愠\uf020趟↕'Isto é ainda mais importante dado que Python 3 gosta de assumir Unicode – portanto, se estiver a trabalhar com ficheiros ou fontes de dados que utilizam uma codificação obscura, certifique-se de prestar atenção extra.
Converta Bytes para String em Python 2
Em Python 2, um pacote de bytes e uma string são praticamente a mesma coisa – strings são objectos que consistem em caracteres de 1 byte de comprimento, o que significa que cada caracter pode armazenar 256 valores. É por isso que por vezes são chamados bytestrings.
Isto é óptimo quando se trabalha com dados de bytes – basta carregá-los numa variável e estamos prontos para imprimir:
>>> s = "Hello world!">>> s'Hello world!'>>> len(s)12Usar caracteres Unicode em bytestrings altera um pouco este comportamento:
>>> s = "Let's grab a 🍕!">>> s'Lets grab a \xf0\x9f\x8d\x95!'# Where has the pizza gone to?>>> len(s)17# Shouldn't that be 15?Converter Bytes para Unicode (Python 2)
Aqui, teremos de usar o tipo Python 2’s Unicode, que é assumido e usado automaticamente em Python 3. Isto armazena cordas como uma série de pontos de código, em vez de bytes.
 O \xf0\x9f\x8d\x95 representa os bytes como números hexadecimais de dois dígitos, uma vez que Python não sabe como representá-los como caracteres ASCII:
>>> u = u"Let's grab a 🍕!"u"Let's grab a \U0001f355!"">>> u"Let's grab a 🍕!"# Yum.>>> len(u)15 Como pode ver acima, a string Unicode contém \U0001f355 – um caracter fugido Unicode que o nosso terminal sabe agora como imprimir como uma fatia de pizza! Definir isto foi tão fácil como usar o u especificador antes do valor do bytestring.
Então, como posso alternar entre os dois?
 Você pode obter a string Unicode descodificando o seu bytestring. Isto pode ser feito através da construção de um objecto Unicode, fornecendo o bytestring e uma string contendo o nome codificador como argumentos ou chamando .decode(encoding) a um bytestring.
Converta Bytes para String Utilizando decodificação() (Python 2)
 Também se pode utilizar o módulo codecs.encode(s, encoding) do módulo codecs.
>>> s = "Let's grab a \xf0\x9f\x8d\x95!">>> u = unicode(s, 'UTF-8')>>> u"Let's grab a 🍕!">>> s.decode('UTF-8')"Let's grab a 🍕!"Converta Bytes para String Utilizando codecs (Python 2)
Or, utilizando o módulo codecs:
import codecs>>> codecs.decode(s, 'UTF-8')"Let's grab a 🍕!"Esteja atento à sua Codificação
Uma palavra de prudência aqui – os bytes podem ser interpretados de forma diferente em diferentes codificações. Com cerca de 80 codificações diferentes disponíveis fora da caixa, pode não ser fácil saber se tem a codificação certa!
 A mensagem original era øç ou јч, e ambas parecem ser conversões válidas.
Conclusão
Como programadores, há algumas coisas em que temos de pensar constantemente e preparar activamente, a fim de evitar armadilhas. Isto é especialmente verdade nos níveis inferiores, onde raramente vamos quando usamos uma linguagem de alto nível como Python como nosso condutor diário.
Coisas como charsets, codificações e binários estão lá para nos lembrar que o nosso trabalho é codificar – codificar os nossos pensamentos em soluções de trabalho. Felizmente, muito deste pensamento torna-se parte da nossa rotina após algumas rondas no teclado.
Neste artigo, analisámos como converter bytes para Strings em Python.