sábado, 26 de maio de 2012

Unicode, encodings


  Estou fazendo uma revisão nos meus estudos sobre fileio.
  Estudando uma classe após outra, acabei chegando novamente em encoding e Unicode.
  Quando se fala em processamento de texto a unidade básica é um character. É a representação de uma letra ou um sinal gráfico. Usa-se também o termo "glyph". Vem daí hieróglifo.
  Um conjunto de characters é um character set. O conjunto da lingua inglesa tem algumas dezenas de carateres, mas o conjunto da lingua chinesa alcança milhares de carateres.
  Um conjunto de characters codificado é um coded character set. Unicode é um exemplo. É a associação entre um character e um número.
  Code points - são os números que podem ser usados num coded character set.
  Character encoding scheme - mapa entre coded character set para code units
  Code units: byte, dois bytes, quatro bytes.
  Muita confusão foram feitas (e ainda são) nessa área.
  No início um byte era suficiente para guardar as informações de texto. 256 possíveis opções, e ainda sobrava. Então, na parte que sobrava, cada um usou sua imaginação e necessidade à vontade. Como tudo isso acontecia antes da globalização, cada um definiu e usou um padrão. ASCII, Cp1252, ISO-8859-1, até chegar em centenas de (falta de) padrões.
  Aí, no início dos anos 90 do século passado, surgiu o Unicode para tentar colocar uma ordem nessa verdadeira torre de Babel. O Unicode foi criado com o humilde propósito de representar qualquer character de qualquer lingua existente ou a ser inventada!
  Começou com 65.536 possibilidades, que logo se mostrou insuficiente, sendo aumentado para 1.112.064 possibilidades, atualmente. Hoje, são utilizados pouco mais de 100.000.
  O Unicode, praticamente se tornou padrão da industria de informática.
  Java usa o Unicode.
  O conceito do Unicode é simples: 1 character - 1 code point. A confusão começa, devido ao fato de que temos diversas formas de traduzir esse code point em bits.
  Na, verdade, isso só acontece devido ao fato de "esquecermos" de informar o código do encoding utilizado para gravar/ler os arquivos de textos.
  Se considerarmos que isso é uma espécie de criptografia, não aconteceria isso. Afinal, todos concordam, que se criptografarmos algo, somente teremos acesso à forma original, se fizermos o oposto. Então, se gravarmos um arquivo de texto com UTF-8, devemos ler com UTF-8. E nunca com Cp1252. É claro, que esse "esquecemos", é maneira de dizer. Afinal, na maioria das vezes isso ocorre com dados vindo de fontes que desconhecemos o formato da gravação.
E, então como proceder?

Nos próximos posts vamos fazer alguns testes com isso.

Nenhum comentário:

Postar um comentário