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))