Mostrando postagens com marcador Unicode. Mostrar todas as postagens
Mostrando postagens com marcador Unicode. Mostrar todas as postagens

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.