Aug 10 2011

Retirar acentos de strings C#

Category: C#Suzuki @ 06:34

Olá pessoal,
Este é um assunto que todo mundo ja se perguntou, entretanto vou deixar minha marca também e pode ser útil.
A remoção de acentos(ou o processo de retirar a acentuação) pode ser feita de várias formas, com replace(substituição de caracteres com acentos por sem acentos),  ou com o auxilio da System.Globalization.

Segundo a MSDN, a System.Globalization namespace contém classes que definem informações relacionadas à cultura, incluindo idioma, país/região, os calendários em uso, os padrões de formatação para datas, moeda e números e a classificação do pedido para seqüências de caracteres.Essas classes são úteis para escrever aplicativos (internacionalizados) globalizados.Classes como StringInfo e TextInfo fornecem funcionalidades de globalização avançados, incluindo substituto suporte e texto elemento processamento.

Particularmente acho bem mais elegante a utilização da System.Globalization para este tipo de tarefa, ambas funcionam, porém irei demonstrar como remover strings utilizando a System.Globalization, por sem mais elegante, farei isso usando extension methods, em breve farei uma postagem tratando apenas deste assunto.
Vamos para a ação! Ao final da postagem deixarei o link para o donwload da classe Useful.

Você pode criar uma classe chamada Useful como a seguir, repare que utilizo apenas a System.Globalization e o System.Text:

  1. using System.Globalization;   
  2. using System.Text;   
  3.   
  4. namespace NinjaCode   
  5. {   
  6.     public static class Useful   
  7.     {   
  8.         public static string RemoveAccents(this string text)   
  9.         {   
  10.             StringBuilder sbReturn = new StringBuilder();   
  11.             var arrayText = text.Normalize(NormalizationForm.FormD).ToCharArray();   
  12.   
  13.             foreach (char letter in arrayText)   
  14.             {   
  15.                 if (CharUnicodeInfo.GetUnicodeCategory(letter) != UnicodeCategory.NonSpacingMark)   
  16.                     sbReturn.Append(letter);   
  17.             }   
  18.             return sbReturn.ToString();   
  19.         }   
  20.     }   
  21. }  

 

Agora para você fazer uso desta classe em seu projeto basta  fazer o seguinte:

  1. using NinjaCode;  


Agora basta usar assim por exemplo:

  1. string testAccent = "Ninja Code removendo acentuação de minhas strings... é show!";   
  2. string test = test.RemoveAccents();   
  3.   
  4. string test1 = "Removendo acentuação com a ajuda do Ninja Code! Até a próxima.".RemoveAccents();  

 

Se você quiser saber mais sobre: 

Extension Methods Clique aqui.
System.Globalization –  Clique aqui.

Para fazer o download da classe Useful – Useful.cs (628.00 bytes).

Simplificando e desmitificando.
Até a próxima.


E se o meu povo, que se chama pelo meu nome, se humilhar, e orar, e buscar a minha face e se converter dos seus maus caminhos, então eu ouvirei dos céus, e perdoarei os seus pecados, e sararei a sua terra. (II Crônicas 7:14)

 

Tags: , , , , , , ,

Comments

1.
pingback thiagosatoshisuzuki.wordpress.com says:

Pingback from thiagosatoshisuzuki.wordpress.com

Retirar acentos de strings C# « Thiago Satoshi Suzuki

2.
Bruno Bruno Brazil says:

Faltou apenas normalizar o resultado para a FormC, desta forma o código irá funcionar com textos asiáticos. Não que seja necessário, mas fica a dica.

stackoverflow.com/.../how-do-i-remove-diacritics-accents-from-a-string-in-net

3.
Suzuki Suzuki Brazil says:

Bruno,
Não entendi esta parte dos textos asiáticos.
De uma olhada na MSDN a respeito das formas de normalização. msdn.microsoft.com/.../...t.normalizationform.aspx

Se você me convencer que não funciona em algum caso, editarei a postagem.

4.
pingback info.metaora.com.br says:

Pingback from info.metaora.com.br

Remover acentos de String – Asp.NET C# | Metaora CodeSnippet

5.
Júlio Nobre Júlio Nobre Portugal says:

Olá Suzuki

Ao longo dos ano, eu já tinha implementado este código em várias linguagens, mas nunca de forma tão genérica.

Muito obrigado pela partilha!

6.
Suzuki Suzuki United Kingdom says:

Júlio,

Que bom que vc tenha gostado.

=D

7.
Igor Igor Brazil says:

Excelente tutorial!

Agora lhe pergunto amigo, e se uma string possuir 8.000 caracteres irá fazer um loop lógico muito grande, isso não irá penalizar a aplicação?

Abraços,

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading