public static void Main()
var b = new byte[] {0xc3, 0x89};
Console.WriteLine("{0} bytes: {1}", b.Length, BitConverter.ToString(b));
Console.WriteLine("Interpreted as a single UTF8 character: {0}", Encoding.UTF8.GetString(b));
var e1252 = Encoding.GetEncoding(1252);
Console.WriteLine("Interpreted as two ASCII characters, string: {0}", Encoding.ASCII.GetString(b));
Console.WriteLine("Interpreted as two Windows-1252 characters: {0}", e1252.GetString(b));
Console.WriteLine("Now, under the bad assumption it is Windows 1252, let's convert to UTF8, effectively doubly-encoding...");
var borked = Encoding.Convert(e1252, Encoding.UTF8, b);
Console.WriteLine("{0} bytes: {1}", borked.Length, BitConverter.ToString(borked));
Console.WriteLine("Interpreted as two UTF8 characters: {0}", Encoding.UTF8.GetString(borked));