public static class Program
public static void Main(string[] args)
var encodings = Encoding.GetEncodings().Select(e => e.GetEncoding()).ToList();
var asciiCompatible = encodings.Where(e => IsAsciiCompatible(e)).ToList();
var nonAsciiCompatbile = encodings.Except(asciiCompatible).ToList();
Console.WriteLine("ASCII compatible: ");
foreach (var encodingName in asciiCompatible.Select(e => e.EncodingName).OrderBy(n => n))
Console.WriteLine("* " + encodingName);
Console.WriteLine("Non-ASCII compatible: ");
foreach (var encodingName in nonAsciiCompatbile.Select(e => e.EncodingName).OrderBy(n => n))
Console.WriteLine("* " + encodingName);
private static readonly byte[] asciiValues = Enumerable.Range(0, 128).Select(b => (byte)b).ToArray();
private static readonly string asciiChars = new string(asciiValues.Select(b => (char)b).ToArray());
public static bool IsAsciiCompatible(Encoding encoding)
return encoding.GetString(asciiValues).Equals(asciiChars, StringComparison.Ordinal)
&& encoding.GetBytes(asciiChars).SequenceEqual(asciiValues);