Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
April 25, 2023 03:07 pm GMT

O mnimo que todo programador deveria saber de encoding e charset

Acredito que todo mundo aqui j deve ter passado por algum problema de encoding, seja trabalhando com strings no Python, seja tipo de dados num DB, seja gerando arquivos, integrando com outros sistemas, etc

Maioria das vezes d pra resolver jogando o erro no stackoverflow?

  • D!

Mas a questo que nos casos em que no d, ou que fica muito mais difcil resolver se voc fez cagada, tipo charset e type no db, ai melhor voc saber o que est fazendo desde o comeo.

Comeando do comeo

Isso parece o bsico, mas vamos relembrar mesmo assim, um computador saber trabalhar com bits, 0 - 1 (no precisa saber disso, mas basicamente por conta de transistores e tem corrente eltrica ou no, mas isso assunto pra dolorosa faculdade de Engenharia da Comp).

Logo, na memria do seu pczim no tem la a string SAVE ME, ele guarda bits, usualmente representados como 011001, algo do gnero, para que esses bits tenham algum significado precisamos converter esses bits em algo, tipo usando uma tabela de converso e esse processo chamamos de encoding.

OBS: save me pq o nome da musica que eu estava ouvindo kkkk, no que seja uma mensagem subliminar ou algo do gnero, risos.

Um dos esquemas de encoding mais utilizado e aceito o ASCII, onde um trecho da tabela segue na imagem abaixo:

ASCII Table

Termos necessrios

charset ou character set

o conjunto de caracteres ou smbolos/letras que podem ser representados por um determinado processo de encoding, vez ou outra usado de maneira intercambivel com encoding.

string

um conjunto de items juntos, uma bit string algo como 0101010111, character string algo como hello world.

Binario, Hex (hexadecimal), Decimal

Existem diversas formas de representar nmeros, da matemtica chamamos de sistema de numerao, que basicamente forma os algarismos e a organizao de sua representao.

Por exemplo, no binrio utilizamos somente 0 e 1, logo, pra representar o algarismo 2 precisamos utilizar 10 (que no significa dez, assim como no sistema decimal e sim 2).

No Hexadecimal temos 16 algarismo, logo 0 - 9 e seguindo com A - F, onde A = 10 e F = 15, logo 10 = 16 no hexadecimal (um zero representa 16).

Qual a tabela mais utilizada?

Como entendemos que char set nada mais que uma tabela de correspondncia entre bits e letras (carcteres), da para imaginar que ao longo da histria tivemos diversas tabelas criadas, algumas mais especficas, para idiomas como chins, japons, etc, e outras mais abrangentes, envolvendo mltiplos idiomas.

Um dia, algum teve a brilhante ideia de unificar todas essas tabelas, da surgiu o Unicode, que no um encoding (dafuck?). Sim, o unicode define code points (converses de nmeros para chars), porm como esses code points so transformados em bits um tpico a parte. Pense da seguinte forma, essa tabela gigantona, logo, se voc no precisa utilizar todos os carcteres presentes (tipo chins ou klingon), seria um desperdcio de espao guardar chars com 4 bytes que poderiam facilmente ser 1 ou 2.

Ento qual o encoding mais utilizado para transformar o Unicode?

ai que entra o UTF e suas variaes, basicamente o UTF possui algoritmos para esse trabalho, UTF-32 usa 4 bytes por caractere, o que na maioria dos casos vai desperdiar muito espao. UTF-8 um encoding de tamanho varivel, onde ele vai utilizar o menor tamanho de byte possvel pra representar um caractere, utilizando o primeiro byte para representar quantos bytes existem na sequncia, chamado de leader byte, os bytes restantes (se forem necessrios) so chamados de trailing bytes. UTF-8 uma tima escolha em geral, porm pode desperdiar espao caso o leader byte seja utilizado com frequncia (ou seja, fora do ASCII). Existe tambm o UTF-16 que est no meio do caminho e pode ser utilizado pra otimizar caso faa sentido.

Misc de code points Unicode

Quem nunca abriu a tabela de Unicode do Windows pra copiar aquele emoji text no mesmo?

\()/

Code points Unicode so escritos em hexadecimal (para manter os nmeros menores), sempre precedidos por U+ (somente um identificador para dizer isto aqui Unicode)

Por exemplo, U+1F975 o emoji pra pimenta em Unicode (sim pimenta, seus pervertidos).

Isso quer dizer que ele o caractere nmero 129397 da tabela.

Last words

E por hoje isso pessoal, agora no tem motivo pra no saber lidar com encodings ein, principalmente quando for gerar uma coluna nova no DB hahaha.
Ahh sim, falando em DB ainda existe o conceito de Collation (basicamente dita como os dados so ordenados, acentos, diferenciao entre letras maisculas e minsculas, etc). Mas ai fica pra uma prxima ocasio, afinal vale um artigo por si s.


Original Link: https://dev.to/erick_tmr/o-minimo-que-todo-programador-deveria-saber-de-encoding-e-charset-4p21

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To