Comment pouvez-vous supprimer les caractères non-ASCII d'une chaîne? (en C #)
Réponses
Trop de publicités?Voici une solution .NET pure qui n'utilise pas d'expressions régulières:
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)
)
);
Cela peut sembler lourd, mais cela devrait être intuitif. Il utilise le codage .NET ASCII pour convertir une chaîne. UTF8 est utilisé pendant la conversion car il peut représenter n'importe lequel des caractères d'origine. Il utilise un EncoderReplacementFallback pour convertir tout caractère non-ASCII en une chaîne vide.
Si vous ne voulez pas supprimer, mais convertir le latin accentué en caractères non accentués, jetez un oeil à cette question: Comment puis-je traduire des caractères 8 bits en caractères 7 bits? (c'est-à-dire Ü à U)
Inspiré par la solution d'expression régulière de philcruz , j'ai fait une pure solution LINQ
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();
}
C'est un code non testé.