Entenda arquivos Unicode

Diversos programadores já tiveram alguns momentos de sufoco ao “codar”. Um deles é lidar com arquivos de Python e em padrão Unicode. E ai, já se esbarrou nessa situação?

Existem diversos padrões que você pode seguir ao escrever arquivos. Dentre eles, dois se sobressaem: arquivos texto e arquivos binários. A grande diferença é a escrita de bits dentro dos computadores. Os arquivos texto sempre mantêm um padrão que pode ser reconhecido como texto e os binários podem escrever em qualquer padrão (o qual é ótimo se você quer manter em segredo o que tem dentro do seu arquivo!).

  • Como identificar um arquivo texto?

É muito simples: basta tentar abrir o arquivo no Bloco de Notas! Caso dentro do bloco estiver um texto que pode ser lido, ele é do tipo texto. Se abrir um texto ilegível (com caracteres indecifráveis) ele é classificado como binário. Segue algumas extensões comuns de arquivos texto e binários:

Arquivos textos: HTML, CSV, TXT e PY.
Arquivos binários são JPG, DOCX, XLSX e EXE.

Vale lembrar que existe diversas outras extensões dos dois tipos. As citadas acima são apenas alguns exemplos.

Além disso, dentro dos arquivos texto existem mais padrões de escrita, como ASCII e Unicode. Esses padrões definem, basicamente, como o computador vai escrever as letras. No caso do Unicode você encontra mais opções de escrita que envolvem até mesmo emojis.

  • Como converter um arquivo para Unicode?

Ao ler um arquivo de texto no seu código (especificamente na linguagem Python), o programador pode passar um parâmetro chamado encoding:

with open(‘arquivo.txt’,encoding=’utf8′) as file:
print(file)

ou:

with open(‘arquivo.txt’,encoding=’ascii’) as file:
print(file)

Caso o seu arquivo esteja em um formato Unicode e maior do que 16 bits, você utilizará:

with open(‘arquivo.txt’,encoding=’utf16′) as file:
print(file)

O mesmo parâmetro pode ser utilizado no Pandas, ao ler um arquivo CSV. Por exemplo:

import pandas as pd
df = pd.read_csv(‘arquivo.csv’,encoding=’utf8′)

Com esses comandos, um arquivo DataFrame é gerado com os valores lidos do CSV.

Em dispositivos que rodam iOS, é importante notar que UTF-8 não é o padrão na linguagem Python. Ou seja, adicionar esse parâmetro no código é essencial caso você seja um usuário da Apple.

Na conversão de formatos de uma string, utilizamos os métodos nativos encode e decode:

string = “Olá”
print(string)

string_ascii = string.encode(“ascii”, “replace”)
print(‘String Binária ASCII com replace: ‘,string_ascii)

string_ascii = string.encode(“ascii”, “ignore”)
print(‘String Binária ASCII com ignore: ‘,string_ascii)

string_unicode = string.encode(‘utf8’)
print(‘String Binária Unicode 8-bits: ‘,string_unicode)

string_binaria = b”Ola” #B antes de uma string significa uma string em bytes
print(string)

string_binaria_ascii = string_binaria.decode(“ascii”, “replace”)
print(‘String ASCII com replace: ‘,string_binaria_ascii)

string_binaria_ascii = string_binaria.decode(“ascii”, “ignore”)
print(‘String ASCII com ignore: ‘,string_binaria_ascii)

string_binaria_unicode = string_binaria.decode(‘utf8’)
print(‘String Unicode 8-bits: ‘,string_binaria_unicode)

O encode sempre retorna uma string binária que pode ser decodificada para outro padrão (que você desejar) ao utilizar o decode.