15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

puramente binários (valores primários de 8 bits). A codificação mais comum é

UTF-8. É importante observar que as instâncias str em Python 3 e unicode em

Python 2 não têm uma codificação binária associada. Para converter caracteres

Unicode para dados binários, é preciso usar o método encode. Para converter

dados binários para caracteres Unicode, é preciso usar o método decode.

Ao escrever programas em Python, é importante codificar e decodificar o

Unicode no limite mais longínquo de suas interfaces. O núcleo de seu programa

deve usar apenas caracteres Unicode (str no Python 3, unicode no Python 2) e

não devem fazer nenhum julgamento quanto à codificação deles. Essa regrinha

permite que o programa possa ser bastante assertivo a respeito de codificações

alternativas de texto (como Latin-1, Shift JIS e Big5) enquanto mantém-se

bastante rigoroso a respeito da codificação do texto de saída (idealmente, UTF-

8).

A confusão causada pelos tipos de caractere causa duas situações muito comuns

quando se codifica em Python:

• Queremos operar com valores brutos de 8 bits codificados em UTF-8 (ou

qualquer outra codificação).

• Queremos operar com caracteres Unicode que não estão codificados em

nenhum padrão específico.

Serão necessárias duas funções auxiliares para converter entre esses dois casos e

assegurar que o tipo do valor de entrada é o que o código está esperando que

seja.

No Python 3, precisaremos de um método que aceite um str ou bytes e sempre

retorne str.

def to_str(bytes_or_str):

if isinstance(bytes_or_str, bytes):

value = bytes_or_str.decode('utf-8')

else:

value = bytes_or_str

return value # Instância de str

Será necessário outro método que aceite valores str ou bytes e sempre retorne

bytes.

def to_bytes(bytes_or_str):

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!