267 votes

Comment pouvez-vous supprimer les caractères non-ASCII d'une chaîne? (en C #)

Comment pouvez-vous supprimer les caractères non-ASCII d'une chaîne? (en C #)

464voto

philcruz Points 2608
string s = "søme string";
s = Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);

152voto

bzlm Points 5500

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.

56voto

Josh Points 43

Je crois que MonsCamus voulait dire:

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

18voto

sinelaw Points 6641

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)

13voto

Bent Rasmussen Points 1606

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é.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X