Arquivo
Encoding .NET
Hoje vamos falar sobre como utilizar as funções de Encoding no .NET. Para isso primeiro é necessário que tenhamos uma visão geral sobre os padrões de encoding existentes.
Você pode imaginar os padrões de encoding como se fossem uma lista com todos os caracteres possíveis dentro daquele padrão. Por exemplo: o padrão ASCII contêm somente caracteres da língua inglesa e alguns tipos de pontuação. Como o ASCII não atendia regiões além das que falam a língua inglesa foram criados outros padrões como o UTF8, UTF16 entre outros.
Dentro do namespace System.Text temos a classe Encoding que centraliza todo o trabalho que você teria que fazer quanto se utiliza Encoding. Por exemplo: para listar todos encodings suportados no seu computador utilize o seguinte código.
- EncodingInfo[] ei = Encoding.GetEncodings();
- foreach (EncodingInfo e in ei)
- {
- Console.WriteLine(e.CodePage + "-" + e.Name + "-" + e.DisplayName);
- }
A classe Encoding tem um método estático GetEncodings que retorna um array de EncodingInfo. O mesmo tem algumas propriedades que podem ser utilizadas para recuperar algumas informações. No exemplo acima eu utilizei as propriedades CodePage, Name e DisplayName.
Cada caracter que você tem dentro de uma string na verdade ele corresponde a um byte de acordo com o encoding escolhido. Você pode verificar a diferença de bytes executando estas seqüencias de código.
- Encoding e = Encoding.GetEncoding("Korean");
- byte[] encoded;
- encoded = e.GetBytes("Gonçalves");
- for (int i = 0; i < encoded.Length; i++)
- {
- Console.WriteLine("Byte {0}: {1}", i, encoded[i]);
- }
- Encoding e = Encoding.GetEncoding("IBM860");
- byte[] encoded;
- encoded = e.GetBytes("Gonçalves");
- for (int i = 0; i < encoded.Length; i++)
- {
- Console.WriteLine("Byte {0}: {1}", i, encoded[i]);
- }
Quando você executar este código você irá perceber que o caracter “ç” é representado de maneiras diferentes dependendo do encoding utilizado. No caso IBM860 é o codePage do encoding “Portuguese”.
O muito importante você trabalhar com o encoding correto quando você estiver escrevendo ou lendo um arquivo. No exemplo abaixo eu demonstro como escrever em um arquivo de texto utilizando o encoding UTF7. E logo em seguida eu demonstro como será a leitura do mesmo utilizando o encoding correto e o encoding errado.
- StreamWriter sw = new StreamWriter("teste.txt", false, Encoding.UTF7);
- sw.WriteLine("Francisco Gonçalves");
- sw.Close();
- StreamReader sr = new StreamReader("teste.txt", Encoding.UTF7);
- Console.WriteLine(sr.ReadToEnd());
- sr.Close();
- StreamReader sr1 = new StreamReader("teste.txt", Encoding.UTF8);
- Console.WriteLine(sr1.ReadToEnd());
- sr1.Close();
Você pode perceber que se usarmos o encoding errado podemos ter alguns problemas na hora da leitura.
E é isso ai pessoal, espere que o artigo tenha seja útil para o seu dia-a-dia. Até a próxima.