texto teclado tabla pertenece cuadrado convertir codigo caracteres ascll c# ascii

c# - teclado - tabla char



Elimine todos los caracteres que no sean ASCII de la cadena (7)

Tengo una rutina C # que importa datos de un archivo CSV, los compara con una base de datos y luego los reescribe en un archivo. El archivo de origen parece tener algunos caracteres que no son ASCII y están ensuciando la rutina de procesamiento.

Ya tengo un método estático al que ejecuto cada campo de entrada, pero realiza comprobaciones básicas como eliminar comas y comillas. ¿Alguien sabe cómo podría agregar funcionalidad que elimine también caracteres que no sean ASCII?


Aquí hay una mejora sobre la respuesta aceptada:

string fallbackStr = ""; Encoding enc = Encoding.GetEncoding(Encoding.ASCII.CodePage, new EncoderReplacementFallback(fallbackStr), new DecoderReplacementFallback(fallbackStr)); string cleanStr = enc.GetString(enc.GetBytes(inputStr));

Este método reemplazará caracteres desconocidos con el valor de fallbackStr , o si fallbackStr está vacío, déjelos fuera por completo. (Tenga en cuenta que enc se puede definir fuera del alcance de una función).


Aquí una solución simple:

public static bool IsASCII(this string value) { // ASCII encoding replaces non-ascii with question marks, so we use UTF8 to see if multi-byte sequences are there return Encoding.UTF8.GetByteCount(value) == value.Length; }

fuente: http://snipplr.com/view/35806/


Hazlo todo a la vez

public string ReturnCleanASCII(string s) { StringBuilder sb = new StringBuilder(s.Length); foreach(char c in s) { if((int)c > 127) // you probably don''t want 127 either continue; if((int)c < 32) // I bet you don''t want control characters continue; if(c == '','') continue; if(c == ''"'') continue; sb.Append(c); } return sb.ToString(); }


Si quisieras probar un personaje específico, podrías usar

if ((int)myChar <= 127)

Solo obtener la codificación ASCII de la cadena no le dirá que un personaje específico no era ASCII para empezar (si le importa eso). Ver MSDN .


Suena extraño que se acepte dejar caer el no ASCII.

También siempre recomiendo la excelente biblioteca FileHelpers para analizar archivos CSV.


public string RunCharacterCheckASCII(string s) { string str = s; bool is_find = false; char ch; int ich = 0; try { char[] schar = str.ToCharArray(); for (int i = 0; i < schar.Length; i++) { ch = schar[i]; ich = (int)ch; if (ich > 127) // not ascii or extended ascii { is_find = true; schar[i] = ''?''; } } if (is_find) str = new string(schar); } catch (Exception ex) { } return str; }


string sOut = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(s))