Removendo a acentua�§�£o e os caracteres especiais de uma String
Estava precisando remover a acentuação e os caracteres especiais do nome de um arquivo. Para isso, desenvolvi um extension method para a classe String.
Exemplo:
String de entrada:
Adobe Acrobat - Pacy-Paraná_05.12_áÃ?¨Ã?¯Ã?´úã+.pdf
String de retorno:
AdobeAcrobatPacyParana_05.12_aeioua.pdf
Desenvolvi o método utilizando uma HashTable e expressão regular. Caso você tenha alguma sugestão de melhoria, poste aí nos comentários.
Extension method:
public static String RemoveSpecialCharacters(this String self)
{
var normalizedString = self;
// Prepara a tabela de símbolos.
var symbolTable = new Dictionary();
symbolTable.Add('a', new char[] {'Ã? ', 'á', 'Ã?¤', 'â', 'ã'});
symbolTable.Add('c', new char[] { 'ç' });
symbolTable.Add('e', new char[] { 'Ã?¨', 'é', 'Ã?«', 'ê' });
symbolTable.Add('i', new char[] { 'Ã?¬', 'í', 'Ã?¯', 'Ã?®' });
symbolTable.Add('o', new char[] { 'Ã?²', 'ó', 'Ã?¶', 'Ã?´', 'õ' });
symbolTable.Add('u', new char[] { 'Ã?¹', 'ú', 'Ã?¼', 'Ã?»' });
// Substitui os símbolos.
foreach (var key in symbolTable.Keys)
{
foreach (var symbol in symbolTable[key])
{
normalizedString = normalizedString.Replace(symbol, key);
}
}
// Remove os outros caracteres especiais.
normalizedString = Regex.Replace(normalizedString, "[^0-9a-zA-Z._]+?", "");
return normalizedString;
}