texto convertir codigo codificar acentos c# ascii

convertir - encoding utf 8 acentos c#



ยฟCรณmo se pueden quitar los caracteres no ASCII de una cadena?(Cรญa#) (11)

¿Cómo se pueden quitar los caracteres no ASCII de una cadena? (Cía#)


Aquí hay una solución .NET pura que no usa expresiones regulares:

string inputString = "Räksmörgås"; string asAscii = Encoding.ASCII.GetString( Encoding.Convert( Encoding.UTF8, Encoding.GetEncoding( Encoding.ASCII.EncodingName, new EncoderReplacementFallback(string.Empty), new DecoderExceptionFallback() ), Encoding.UTF8.GetBytes(inputString) ) );

Puede parecer engorroso, pero debe ser intuitivo. Utiliza la codificación .NET ASCII para convertir una cadena. UTF8 se usa durante la conversión porque puede representar cualquiera de los caracteres originales. Utiliza un EncoderReplacementFallback para convertir cualquier carácter no ASCII en una cadena vacía.


Creo que MonsCamus quiso decir:

parsememo = Regex.Replace(parsememo, @"[^/u0020-/u007E]", string.Empty);


Encontré que el siguiente rango ligeramente modificado es útil para analizar bloques de comentarios de una base de datos, esto significa que no tendrá que lidiar con los caracteres de tabulación y escape que harían que un campo CSV se alterara.

parsememo = Regex.Replace(parsememo, @"[^/u001F-/u007F]", string.Empty);

Si desea evitar otros caracteres especiales o puntuación particular, consulte la tabla ascii


Esto no es óptimo en cuanto a rendimiento, pero es un enfoque Linq bastante sencillo:

string strippedString = new string( yourString.Where(c => c <= sbyte.MaxValue).ToArray() );

El inconveniente es que todos los caracteres "supervivientes" se colocan primero en una matriz de tipo char[] que luego se desecha después de que el constructor de string ya no la usa.


Inspirado en la solución de expresión regular de philcruz , he creado una solución LINQ pura

public static string PureAscii(this string source, char nil = '' '') { var min = ''/u0000''; var max = ''/u007F''; return source.Select(c => c < min ? nil : c > max ? nil : c).ToText(); } public static string ToText(this IEnumerable<char> source) { var buffer = new StringBuilder(); foreach (var c in source) buffer.Append(c); return buffer.ToString(); }

Este es un código no probado.


Si no quieres eliminar, pero para convertir el acento latino a los caracteres sin acento, mira esta pregunta: ¿Cómo se traducen los caracteres de 8 bits en caracteres de 7 bits? (es decir, Ü a U)


Utilicé esta expresión regex:

string s = "søme string"; Regex regex = new Regex(@"[^a-zA-Z0-9/s]", (RegexOptions)0); return regex.Replace(s, "");


Vine aquí buscando una solución para caracteres ASCII extendidos, pero no pude encontrarla. Lo más cercano que encontré es la solución de bzlm . Pero eso solo funciona para el código ASCII hasta 127 (obviamente, puede reemplazar el tipo de codificación en su código, pero creo que fue un poco complejo de entender. Por lo tanto, compartir esta versión). Aquí hay una solución que funciona para códigos ASCII extendidos, es decir, hasta 255, que es la norma ISO 8859-1

Encuentra y elimina caracteres que no son ASCII (más de 255)

Dim str1 as String= "â, ??î or ôu๐Ÿ•ง๏ฟฝ nโ˜iโœ‘๐Ÿ’ด++$-๐Ÿ’ฏโ™“!๐Ÿ‡ช๐Ÿš‘๐ŸŒšโ€ผโ‰4โƒฃod;/โฌ''®;๐Ÿ˜โ˜•๐Ÿ˜:โ˜)๐Ÿ˜๐Ÿ˜///๐Ÿ˜1!@#" Dim extendedAscii As Encoding = Encoding.GetEncoding("ISO-8859-1", New EncoderReplacementFallback(String.empty), New DecoderReplacementFallback()) Dim extendedAsciiBytes() As Byte = extendedAscii.GetBytes(str1) Dim str2 As String = extendedAscii.GetString(extendedAsciiBytes) console.WriteLine(str2) ''Output : â, ??î or ôu ni++$-!โ€ผโ‰4od;/'';:)///1!@#$%^yz:

Aquí hay un violín de trabajo para el código

Reemplace la codificación de acuerdo con el requisito, el resto debe permanecer igual.


Yo uso esta expresión regular para filtrar los caracteres malos en un nombre de archivo.

Regex.Replace(directory, "[^a-zA-Z0-9//:_/- ]", "")

Eso debería ser todos los caracteres permitidos para los nombres de archivo.


no hay necesidad de expresiones regulares. solo usa codificación ...

sOutput = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(sInput));


string s = "søme string"; s = Regex.Replace(s, @"[^/u0000-/u007F]+", string.Empty);