2010-09-13 4 views

Répondre

4

Vous pouvez utiliser une expression régulière pour filtrer les caractères non ASCII:

string input = "AB £ CD"; 
string result = Regex.Replace(input, "[^\x0d\x0a\x20-\x7e\t]", ""); 
1

Vous pouvez utiliser des expressions régulières.

Regex.Replace(input, "[^a-zA-Z0-9]+", "") 

Vous pouvez également utiliser \W+ comme motif pour enlever tout caractère non.

-1

Je pense que quelque chose d'aussi simple que cela marcherait probablement, ne serait-il?

public static string AsciiOnly(this string input, bool includeExtendedAscii) 
{ 
    int upperLimit = includeExtendedAscii ? 255 : 127; 
    char[] asciiChars = input.Where(c => (int)c <= upperLimit).ToArray(); 
    return new string(asciiChars); 
} 

Exemple d'utilisation:

string input = "AB£ȼCD"; 
string asciiOnly = input.AsciiOnly(false); // returns "ABCD" 
string extendedAsciiOnly = input.AsciiOnly(true); // returns "AB£CD" 
+0

Tout d'abord, ce qui est " ascii étendu "? Deuxièmement, je ne peux pas voir comment cela fonctionne à moins de supposer l'encodage UTF-8? Certainement pas le codage UTF-16 par défaut, car alors les résultats ne rentreront pas dans un tableau char. (Les caractères sont 8 bits, non?) – Arafangion

0

Tout d'abord, vous devez déterminer ce que vous entendez par un "mot". Si non-ascii, cela implique probablement non-anglais?

Personnellement, je vous demanderais pourquoi vous avez besoin de faire cela et quelle est l'hypothèse fondamentale de votre application qui est en conflit avec vos données? Selon la situation, je vous suggère soit de recoder le texte à partir du codage source, bien qu'il s'agisse d'une conversion avec perte, ou bien d'adresser cette hypothèse fondamentale pour que votre application gère correctement les données.

Questions connexes