C# - Remover acentos de uma string


Caso você precise remover todos acentos de uma string/texto, você pode criar um class helper para tal:

public static class String
{
	public static string RemoveAccents(this string str)
	{
		return new string(str
			.Normalize(NormalizationForm.FormD)
			.Where(ch => char.GetUnicodeCategory(ch) != UnicodeCategory.NonSpacingMark)
			.ToArray());
	}
}

O que são NormalizationForm.FormD e UnicodeCategory.NonSpacingMark?

Isso é uma forma de representar a string original de forma que marcas como acentuação, cedilha, entre outras, sejam separadas em caracteres distintos: o caractere base, que é a letra, e o caractere da marcação. O caractere de acentuação, neste caso é chamado de NonSpacingMark, ou seja, marcador sem espaço, significa que é um marcador que não ocupa nenhum espaço, e será aplicado ao caractere anterior.

Usando o LINQ podemos remover estas marcações, deixando apenas os caracteres base, sem as marcações e construímos uma nova string a partir desses caracteres.

c · ‎removeracentos · ‎acentos · ‎linq · ‎unicode · ‎normalization

Última atualização: 22/02/2018 às 05:19


  • Buscar